python - 如何从分组数据创建数据框

标签 python pandas

我有一个数据框(我们称之为“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/

相关文章:

python - Numpy maskedarray 缺少堆栈函数

python - 'sys.argv' 是什么意思?

python-3.x - 根据 Count > 1 在 pandas 中创建 df

python - 如何将数据框中的每一列与另一个数据框 Pandas 中的一行相乘?

python - 根据行值使用其他列的名称填充新的 pandas 数据框列

python - 检测套接字关闭的原因 : FIN vs RST

python - 将所有分区迭代到 k 组?

python - 在列表中查找较小列表的确切位置(python)

python - 使用 pandas read_csv 和证书

python - 获取 Pandas 中 2 个相应系列的最小和最大元素