多个级别的Groupby和Sum

时间:2019-08-15 13:40:48

标签: python pandas

我有一个带有以下初始化的数据框,我想查找列“ b”中是否存在列“ a”中的值。然后,如果存在该值,则我希望列“ c”的所有对应值之和。

不适用

df = pd.DataFrame({'a': [1,2,3, 1, 4, 1, 2],
              'b': [1,5,1, 2, 3, 1, 3],
              'c': [10,20,40, 50, 60, 70, 100]})

示例结果在下面的图像链接中:

enter image description here

3 个答案:

答案 0 :(得分:1)

df[['a','b']].join(df.groupby('b').c.sum(),on='a').fillna(0, downcast='infer')

df.groupby('b').c.sum().reindex(df.a,fill_value=0).reset_index().assign(b=df.b).sort_index(axis=1)

df.assign(c = df.groupby('b').c.sum().reindex(df.a, fill_value=0).reset_index(drop=True))

答案 1 :(得分:0)

看看下面的单行代码:D

df[["a"]].merge(df.groupby("b").c.sum().reset_index().rename(columns={"b":"a"}), how="left").fillna(0)

答案 2 :(得分:0)

只要b中的值存在于a中,这将为b列中的每个值求和c列的值。

import pandas as pd


df = pd.DataFrame({'a': [1,2,3, 1, 4, 1, 2],
              'b': [1,5,1, 2, 3, 1, 3],
              'c': [10,20,40, 50, 60, 70, 100]})


new_df = df[['a']].drop_duplicates().merge(df[['b', 'c']], left_on = 'a', right_on = 'b', how = 'left').groupby('a', as_index = False)['c'].sum()