在特定月份中,我为每个人都有一个数字,用整数表示。我需要为每个人添加这些数字,直到每一行的指定日期为止。我想在python DataFrame上使用apply函数使其具有可伸缩性。
例如:
df = pd.DataFrame(
{'number': [10, 20 , 30, 40, 50], 'individual': ["John", "John" , "Eleonor", "Eleonor", "Eleonor"], 'date': [1, 2, 3, 4, 5]})
df =
number individual date
0 10 John 1
1 20 John 2
2 30 Eleonor 3
3 40 Eleonor 4
4 50 Eleonor 5
当日期严格低于行中的数字时,我想对数字求和,如果没有行具有满足条件的日期,则输入NA。 结果将是:
number individual date
0 NA John 1
1 10 John 2
2 NA Eleonor 3
3 30 Eleonor 4
4 70 Eleonor 5
答案 0 :(得分:0)
df = pd.DataFrame({'num': [10, 20 , 30, 40, 50],
'ind': ["John", "John" , "Eleonor", "Eleonor", "Eleonor"],
'date': [1, 2, 3, 4, 5]})
df['x'] = df.groupby('ind')['num'].shift()
df['y'] = df.groupby('ind')['x'].cumsum()
print(df)
收益
num ind date x y
0 10 John 1 NaN NaN
1 20 John 2 10.0 10.0
2 30 Eleonor 3 NaN NaN
3 40 Eleonor 4 30.0 30.0
4 50 Eleonor 5 40.0 70.0
答案 1 :(得分:0)
我找到了按要求使用apply方法的解决方案,该方法允许使用dask:
df['number'] = df.groupby("individual")['number'].apply(lambda x: x.expanding().sum().shift())
产生
number individual date
0 NaN John 1
1 10.0 John 2
2 NaN Eleonor 3
3 30.0 Eleonor 4
4 70.0 Eleonor 5