熊猫groupby和pct更改未返回期望值

时间:2018-06-28 14:52:54

标签: python pandas dataframe

对于以下数据框中的每个Name,我尝试查找从一个TimeAmount列的下一个百分比变化:

enter image description here

创建数据框的代码:

import pandas as pd

df = pd.DataFrame({'Name': ['Ali', 'Ali', 'Ali', 'Cala', 'Cala', 'Cala', 'Elena', 'Elena', 'Elena'],
                   'Time': [1, 2, 3, 1, 2, 3, 1, 2, 3],
                   'Amount': [24, 52, 34, 95, 98, 54, 32, 20, 16]})

df.sort_values(['Name', 'Time'], inplace = True)

我尝试的第一种方法(基于this question and answer)使用了groupbypct_change

df['pct_change'] = df.groupby(['Name'])['Amount'].pct_change()

结果:

enter image description here

这似乎没有按名称分组,因为它的结果与我没有使用groupby并调用df['Amount'].pct_change()的结果相同。根据{{​​1}}的{​​{3}},上述方法应该可以计算出每个值相对于组中先前值的百分比变化。

第二种方法是将pandas.core.groupby.DataFrameGroupBy.pct_changegroupbyapply结合使用:

pct_change

结果:

Pandas Documentation

这次所有百分比更改都是正确的。

为什么df['pct_change_with_apply'] = df.groupby('Name')['Amount'].apply(lambda x: x.pct_change()) groupby方法不能返回正确的值,而将pct_changegroupby一起使用却能返回正确的值?

编辑2018年1月28日:此行为已在最新版本的Pandas 0.24.0中得到纠正。要安装,请运行apply

1 个答案:

答案 0 :(得分:2)

@piRSquared已在评论中指出;这是由于bug filed on Github under issue #21621。它似乎已经在里程碑0.24.0中解决(由于2018年12月31日)。我的版本(0.23.4)仍显示此错误行为。