Pandas groupby和pct改变不返回预期值

wil*_*llk 13 python dataframe pandas

对于Name以下数据框中的每一个,我试图找到从列Time到下一Amount列的百分比变化:

在此输入图像描述

用于创建数据帧的代码:

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)
Run Code Online (Sandbox Code Playgroud)

我尝试的第一种方法(基于这个问题和答案)使用groupbypct_change:

df['pct_change'] = df.groupby(['Name'])['Amount'].pct_change()
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此输入图像描述

这似乎不是按名称分组,因为它与我使用no groupby和被调用的结果相同df['Amount'].pct_change().按照熊猫文档进行pandas.core.groupby.DataFrameGroupBy.pct_change,上述办法应努力来计算一组中的前值的每个值的百分比变化.

对于第二种方法我用groupbyapplypct_change:

df['pct_change_with_apply'] = df.groupby('Name')['Amount'].apply(lambda x: x.pct_change())
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此输入图像描述

这次所有百分比变化都是正确的.

为什么groupbypct_change方法没有返回正确的值,但使用groupbywith apply

编辑2018年1月28日:此行为已在最新版本的Pandas中更正,为0.24.0.安装运行pip install -U pandas.

jor*_*mit 3

正如@piRSquared 在评论中已经指出的那样;这是由于在 Github 上提交的问题 #21621造成的。它看起来已经在里程碑中得到解决0.24.0(截止日期为 2018 年 12 月 31 日)。我的版本 ( 0.23.4) 仍然显示此错误行为。