![](/img/trans.png)
[英]Simplest or most Pythonic way to exclude rows in a DataFrame based on a list of regex patterns?
[英]Most pythonic way to sum rows in a dataframe based on index groups
我有以下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 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']
但這是最蟒蛇的方式嗎?
使用groupby
和agg
df.groupby(df.index).agg({'aa': 'sum',
'bb': 'sum',
'cc': 'sum',
'cat': ''.join})
或傳遞numeric_only=False
(更簡單,但我不建議)
df.groupby(df.index).sum(numeric_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.reset_index().groupby("index")
.agg(lambda x:np.sum(x) if x.dtype == "int" else "".join(x))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.