我有一个数据框(我们称之为“csv”),我想对其进行分组并获取该组第一个元素的值。示例:
A B C D
foo bar happy yellow
foo bar sad green
foo ape last laugh
我想要这样的输出:
A B C
foo bar happy
foo ape last
我目前这样做:
grp1 = csv.groupby(['A','B'])
lst = [(A,B,csv.ix[group[0]]['C']) for (A,B),group in grp1.groups.items()]
df = DataFrame(lst,columns=['A','B','C'])
df.to_csv('grp.csv',cols=['A','B','C'],index=False)
但这似乎效率低下。我真的必须先创建一个列表,然后从中创建一个 dataframe
吗?有没有办法直接创建一个 dataframe
,或者在原始 dataframe
上做一些索引或其他事情,这样我就可以只处理第一条记录每组?
最佳答案
您可以使用 aggregate
来定义聚合函数,它只会保留列的第一个元素并删除其他元素。
In [60]: grp = df.groupby(['A', 'B'])
In [61]: grp.aggregate({'C': lambda c: c.ix[c.first_valid_index()]})
Out[61]:
C
A B
foo ape last
bar happy
关于python - 如何从分组数据创建数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10824906/