我想问一个关于Pandas groupby的问题。 我正在使用ipython notebook(python3)。
例如,有一个这样的数据框。
df1 = pd.DataFrame( { "Score" : ["A", "B", "C", "A", "B", "A"] ,"Class":
["Physics", "Science", "Chemistry", "Biology", "History", "English"] } )
然后,我想用分数组合。
df1.groupby("Score")
我需要一个这样的输出文件,我试过
df1.groupby("Score").to_csv("Score.txt",sep="\t")
但这不起作用。 有谁知道如何制作输出文件?
答案 0 :(得分:3)
你问的是没有意义的。你可能没有意识到这一点。 groupby
创建一个暂存区域,可以跨多个数据组执行聚合或转换。就像,如果我们想要计算每个组的观察数量,那就是聚合。
因为您认为可以输出为某个表格,所以我猜您认为groupby
实际上将行组合在一起。如果您以前从未见过它,即使它不正确,这对该术语的解释也不错。这样做的方法是使用方法sort_values
进行排序。
df1.sort_values('Score')
Class Score
0 Physics A
3 Biology A
5 English A
1 Science B
4 History B
2 Chemistry C
如果分数是尚未按字典顺序排序的其他内容,我们可以使用categorical
类型为我们处理。
score = df1.Score.astype('category', categories=list('ABCDF'), ordered=True)
df1.assign(Score=score).sort_values('Score')
Class Score
0 Physics A
3 Biology A
5 English A
1 Science B
4 History B
2 Chemistry C
最后,按照预期将数据输出到文件
df1.sort_values('Score').to_csv("Score.txt", sep="\t")
答案 1 :(得分:1)
这是解决方案,我认为接近你想要的
df1=df1.reset_index()
df1=df1.groupby(['Score','index']).Class.apply(sum).to_frame()
df1
Out[102]:
Class
Score index
A 0 Physics
3 Biology
5 English
B 1 Science
4 History
C 2 Chemistry
答案 2 :(得分:0)
你需要通过计数,手段或其他来告诉你想要分组的内容。
df1.groupby("Score").count().to_csv('d.csv')