对数据帧列中按一列分组的所有值求和(取决于其他列的值)

2024-06-02 08:17:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数字,每个人在一个特定的月份由一个整数表示。我需要为每一个人添加这些数字,直到每一行的指定日期。我想在python数据帧上使用apply函数使其具有可伸缩性

例如:

df = pd.DataFrame(
{'number': [10, 20 , 30, 40, 50], 'individual': ["John", "John" , "Eleonor", "Eleonor", "Eleonor"], 'date': [1, 2, 3, 4, 5]})

数据框=

   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

Tags: 数据函数numberdataframedfdate数字整数
2条回答
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

我找到了按要求使用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

相关问题 更多 >