我正在尝试加载一个如下所示的数据集:
Algeria,73.131000,6406.8166213983,0.1
Angola,51.093000,5519.1831786593,2
Argentina,75.901000,15741.0457726686,0.5
Armenia,74.241000,4748.9285847709,0.1
Run Code Online (Sandbox Code Playgroud)
最后,我只需要第1列和第2列.我不需要国名和最后一栏.基本上,我需要提取两个尺寸为nx1的矩阵.我知道我需要指定数据类型:
data=np.loadtxt('file.txt',delimiter=',',dtype=[('f0',str),('f1',float),('f2',float),('f3',float)])
Run Code Online (Sandbox Code Playgroud)
但是,这会生成一个元组列表,
array([('', 73.131, 6406.8166213983, 0.1),
('', 51.093, 5519.1831786593, 2.0),`
Run Code Online (Sandbox Code Playgroud)
代替
array(['',73.131,6406.8166213983,0.1],
['',51.093, 5519.1831786593, 2.0],
Run Code Online (Sandbox Code Playgroud)
哪里出错了?
我有2个数据框:
df1具有白色产品的ID和数量
product_id, count_white
12345,4
23456,7
34567,1
Run Code Online (Sandbox Code Playgroud)
df2具有所有产品的ID和计数
product_id,total_count
0009878,14
7862345,20
12345,10
456346,40
23456,30
0987352,10
34567,90
Run Code Online (Sandbox Code Playgroud)
df2比df1具有更多的产品。我需要在df2中搜索df1中的产品,并将total_count列添加到df1中:
product_id,count_white,total_count
12345,4,10
23456,7,30
34567,1,90
Run Code Online (Sandbox Code Playgroud)
我可以进行左合并,但最终会得到一个很大的文件。有什么办法可以使用merge将df2的特定行添加到df1?
我试图用seaborn绘制条形图.样本数据:
x=[1,1000,1001]
y=[200,300,400]
cat=['first','second','third']
df = pd.DataFrame(dict(x=x, y=y,cat=cat))
Run Code Online (Sandbox Code Playgroud)
我用的时候:
sns.factorplot("x","y", data=df,kind="bar",palette="Blues",size=6,aspect=2,legend_out=False);
Run Code Online (Sandbox Code Playgroud)
产生的数字是
当我添加图例时
sns.factorplot("x","y", data=df,hue="cat",kind="bar",palette="Blues",size=6,aspect=2,legend_out=False);
Run Code Online (Sandbox Code Playgroud)
结果图看起来像这样
如您所见,条形图从值移开.我不知道如何获得与第一张图中相同的布局并添加图例.
我不一定与seaborn绑在一起,我喜欢调色板,但任何其他方法都适合我.唯一的要求是该图看起来像第一个并且有图例.
我有一个DataFrame
看起来像这样:
score num_participants
0 20
1 15
2 5
3 10
4 12
5 15
Run Code Online (Sandbox Code Playgroud)
我需要找到score
大于或等于score
当前行的参与者数量:
score num_participants num_participants_with_score_greater_or_equal
0 20 77
1 15 57
2 5 42
3 10 37
4 12 27
5 15 15
Run Code Online (Sandbox Code Playgroud)
所以,我试图将当前行和它下面的所有行相加.数据有大约5000行,所以我无法通过索引手动设置它.cumsum
我没有做到这一点,我不确定是否有一个简单的方法来做到这一点.我花了很多时间试图解决这个问题,所以任何帮助都会受到赞赏.
我的数据结构是JSON格式:
"header"{"studentId":"1234","time":"2016-06-23","homeworkSubmitted":True}
"header"{"studentId":"1234","time":"2016-06-24","homeworkSubmitted":True}
"header"{"studentId":"1234","time":"2016-06-25","homeworkSubmitted":True}
"header"{"studentId":"1236","time":"2016-06-23","homeworkSubmitted":False}
"header"{"studentId":"1236","time":"2016-06-24","homeworkSubmitted":True}
....
Run Code Online (Sandbox Code Playgroud)
我需要绘制一个直方图,显示家庭作业的数量已提交:对所有stidentId为真.我编写的代码使数据结构变得扁平化,因此我的密钥是header.studentId,header.time和header.homeworkSubmitted.
我使用keyBy按studentId分组:
initialRDD.keyBy(lambda row: row['header.studentId'])
.map(lambda (k,v): (k,v['header.homeworkSubmitted']))
.map(mapTF).groupByKey().mapValues(lambda x: Counter(x)).collect()
Run Code Online (Sandbox Code Playgroud)
这给了我这样的结果:
("1234", Counter({0:0, 1:3}),
("1236", Counter(0:1, 1:1))
Run Code Online (Sandbox Code Playgroud)
我只需要计数1,可能映射到列表,以便我可以使用matplotlib绘制直方图.我不知道如何继续并过滤所有内容.
编辑:最后我遍历字典并将计数添加到列表中,然后绘制列表的直方图.我想知道是否有一种更优雅的方式来完成我在代码中概述的整个过程.
我正在与seaborn的酒吧斗争,我不确定我做错了什么.数据非常简单:
name totalCount
Name1 2000
Name2 40000
Name3 50000
sns.barplot(x='name',y='totalCount',data=df)
Run Code Online (Sandbox Code Playgroud)
生成具有平均值(totalCount)而不是实际计数的条形图.
sns.countplot('name',data=df)
Run Code Online (Sandbox Code Playgroud)
生成一个条形图,y轴上的所有计数值等于1.
如何生成具有以下内容的绘图:
x轴上的totalCount,y轴上的名称?