Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从分组数据创建数据帧_Python_Pandas - Fatal编程技术网

Python 如何从分组数据创建数据帧

Python 如何从分组数据创建数据帧,python,pandas,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,

我有一个数据框(我们称之为“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
?有没有一种方法可以直接创建一个
数据框
,或者对原始的
数据框
进行某种索引或其他操作,这样我就可以处理每个组中的第一条记录了?

您可以使用
聚合
来定义聚合函数,只保留列的第一个元素,删除其他元素

    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