Python Groupby和Sum的多个级别

Python Groupby和Sum的多个级别,python,pandas,Python,Pandas,我有一个具有以下初始化的数据帧,我想知道列“a”中的值是否存在于列“b”中。然后,如果值存在,我想要列“c”的所有对应值的总和 NA 示例结果位于下面的图像链接中: 看看下面的一行:D df[["a"]].merge(df.groupby("b").c.sum().reset_index().rename(columns={"b":"a"}), how="left").fillna(0) 只要b列中的值存在于a中,这将为b列中的每个值计算c列值的总和 import pandas as pd

我有一个具有以下初始化的数据帧,我想知道列“a”中的值是否存在于列“b”中。然后,如果值存在,我想要列“c”的所有对应值的总和

NA

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


看看下面的一行:D

df[["a"]].merge(df.groupby("b").c.sum().reset_index().rename(columns={"b":"a"}), how="left").fillna(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()


how='left'解决了我的问题,而不是使用how='inner'。稍后与我的原始df合并。谢谢下面是答案: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()new_df=new_df.rename(columns={'c':'c_sum'})df1=df.merge(new_df on='a',how='left')我做了。考虑到我的声誉,它没有被公开记录。答案: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()new_df=new_df df.rename(columns={'c':'c''sum})df1=df.merge(new_df,on='a',how='left'))
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()

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))