将pandas groupby操作的输出保存为CSV

时间:2017-09-07 03:21:15

标签: python pandas dataframe group-by

我想问一个关于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")

但这不起作用。 有谁知道如何制作输出文件?

3 个答案:

答案 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')