Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.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,我有以下数据帧: df = pd.DataFrame([[1,2,3,'a'],[4,5,6,'a'],[2,4,1,'a'],[2,4,1,'b'],[4,9,6,'b'],[2,4,1,'b']], index=[0,1,2,0,1,2], columns=['aa','bb','cc','cat']) aa bb cc cat 0 1 2 3 a 1 4 5 6 a 2 2 4

我有以下数据帧:

df = pd.DataFrame([[1,2,3,'a'],[4,5,6,'a'],[2,4,1,'a'],[2,4,1,'b'],[4,9,6,'b'],[2,4,1,'b']], index=[0,1,2,0,1,2], columns=['aa','bb','cc','cat'])


     aa    bb    cc    cat
0    1      2     3    a
1    4      5     6    a
2    2      4     1    a
0    2      4     1    b
1    4      9     6    b
2    2      4     1    b
我需要添加具有相同索引的行

    aa   bb   cc  cat
0   3    6    4    ab
1   8   14   12    ab
2   4    8    2    ab
我使用了以下代码:

df_ab = df[df['cat'] == 'a'] + df[df['cat'] == 'b']

但是,这是最具Python风格的方式吗?

使用
groupby
agg

df.groupby(df.index).agg({'aa': 'sum',
                          'bb': 'sum',
                          'cc': 'sum',
                          'cat': ''.join})

或者pass
numeric\u only=False
(更简单,但我不推荐)


两种输出

    aa  bb  cc cat
0   3   6   4  ab
1   8  14  12  ab
2   4   8   2  ab

我们可以选择列的
dtype
,并确定使用哪种类型的
agg
函数

df.groupby(level=0).agg(lambda x : x.sum() if x.dtype!='object' else ''.join(x))
Out[271]: 
   aa  bb  cc cat
0   3   6   4  ab
1   8  14  12  ab
2   4   8   2  ab
使用这一行:)

可能重复的
df.groupby(level=0).agg(lambda x : x.sum() if x.dtype!='object' else ''.join(x))
Out[271]: 
   aa  bb  cc cat
0   3   6   4  ab
1   8  14  12  ab
2   4   8   2  ab
(df.reset_index().groupby("index")
 .agg(lambda x:np.sum(x) if x.dtype == "int" else "".join(x))