熊猫将功能应用于Groupby子数据框

时间:2020-02-12 12:43:03

标签: pandas pandas-groupby apply

是否有一种方法可以将功能应用于子数据框,而不仅仅是主数据的列或行?

例如,如果我有
df = pd.DataFrame({'ID': [1,2,2,3,3], 'Valid':[0, 0, 0, 1, 1], 'Value':[10, 5, 10, 0, 10]})

Example DataFrame

我想要的预期输出是
out = pd.DataFrame({'ID':[1,2,3], 'Value':[0, 0, 10]})
Output

是将对ID有效的所有值相加,然后我想应用

def calc(subDf):
'''
this is doing some inner calculations for the dataframe which is already grouped.
'''
    output = subDf[subDf['Valid']].sum()
    return output

有没有办法以df.groupby('ID').apply(calc)的形式做到这一点?

1 个答案:

答案 0 :(得分:0)

我认为您需要在必要时将列转换为布尔值,并为sum的过滤器列添加列名:

def calc(subDf):

    output = subDf.loc[subDf['Valid'].astype(bool), 'Value'].sum()
    return output

df = df.groupby('ID').apply(calc).reset_index(name='Value')
print (df)

   ID  Value
0   1      0
1   2      0
2   3     10