基于索引组对数据帧中的行求和的最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))