Pandas groupby 函数

Pandas groupby function

假设我在数据框中有以下数据集,df:

import pandas as pd

df = pd.DataFrame({'ID' : ['A','A','A','B','B','B'], 'Date' : ['1-Jan','2-Jan','3-Jan','1-Jan','2-Jan','3-Jan'],'VAL' : [45,23,54,65,76,23]})

我正在尝试插入一个列,比如 'new_col',它计算按 ID 分组的 VAL 的百分比变化。因此,例如,我希望将百分比从 45 更改为 23、从 23 更改为 54,然后重新启动 ID 'B'。下面的代码有效,但它计算的是百分比变化,与 ID 无关。

df['new_col'] = (df['VAL'] - df['VAL'].shift(1)) / df['VAL'].shift(1)

我尝试在其前面添加按功能分组,但仍然出现错误:

df['new_col'] = df.groupby('ID')[(df['VAL'] - df['VAL'].shift(1)) / df['VAL'].shift(1)]
                ^^^^^^^^^^^^^^^^

你不能就这样把括号里的表达式贴到 groupby 上。您需要做的是使用 apply 应用一个函数来计算您想要的内容。你想要的可以使用diff方法更简单地计算出来:

>>> df.groupby('ID')['VAL'].apply(lambda g: g.diff()/g.shift())
0         NaN
1   -0.488889
2    1.347826
3         NaN
4    0.169231
5   -0.697368
dtype: float64

正如 DSM 在评论中指出的那样,在这种情况下,您可以直接使用 pct_change 方法:

>>> df.groupby('ID')['VAL'].pct_change()
0         NaN
1   -0.488889
2    1.347826
3         NaN
4    0.169231
5   -0.697368
dtype: float64

但是,最好了解如何使用 apply 进行操作,因为如果您想对组执行更复杂的操作(即,没有预定义的一次性方法的操作)。