首页 > 解决方案 > 在 groupby 之后在每个组中进行更改

问题描述

让我们有一个像

names = ['bob', 'alice', 'bob', 'bob', 'ali', 'alice', 'bob', 'ali', 'moji', 'ali', 'moji', 'ali', 'bob', 'bob', 'bob']
times = [21 , 34, 37, 40, 55, 65, 67, 84, 88, 90 , 91, 97, 104,105, 108]
df = pd.DataFrame({'name' : names , 'time_of_action' : times})

我们希望groupbyname每个组中考虑从 0 开始的时间。也就是说,在每个组中,我们希望从该组的所有时间中减去该组中的 min-time_of_action。我们如何用 pandas 系统地做到这一点?

标签: pythonpandas

解决方案


如果我是正确的,那么你想要这个:

df['new time'] = df['time_of_action']-df.groupby('name')['time_of_action'].transform('min')

东风:

    name    time_of_action  new time
0   bob     21              0
1   alice   34              0
2   bob     37              16
3   bob     40              19
4   ali     55              0
5   alice   65              31
6   bob     67              46
7   ali     84              29
8   moji    88              0
9   ali     90              35
10  moji    91              3
11  ali     97              42
12  bob     104             83
13  bob     105             84
14  bob     108             87

推荐阅读