是否有一种方法可以将功能应用于子数据框,而不仅仅是主数据的列或行?
例如,如果我有
df = pd.DataFrame({'ID': [1,2,2,3,3], 'Valid':[0, 0, 0, 1, 1], 'Value':[10, 5, 10, 0, 10]})
我想要的预期输出是
out = pd.DataFrame({'ID':[1,2,3], 'Value':[0, 0, 10]})
是将对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)
的形式做到这一点?
答案 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