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)
我尝试的第一种方法(基于这个问题和答案)使用groupby
和pct_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
,上述办法应努力来计算一组中的前值的每个值的百分比变化.
对于第二种方法我用groupby
用apply
和pct_change
:
df['pct_change_with_apply'] = df.groupby('Name')['Amount'].apply(lambda x: x.pct_change())
Run Code Online (Sandbox Code Playgroud)
结果如下:
这次所有百分比变化都是正确的.
为什么groupby
和pct_change
方法没有返回正确的值,但使用groupby
with apply
?
编辑2018年1月28日:此行为已在最新版本的Pandas中更正,为0.24.0.安装运行pip install -U pandas
.
正如@piRSquared 在评论中已经指出的那样;这是由于在 Github 上提交的问题 #21621造成的。它看起来已经在里程碑中得到解决0.24.0
(截止日期为 2018 年 12 月 31 日)。我的版本 ( 0.23.4
) 仍然显示此错误行为。
归档时间: |
|
查看次数: |
1184 次 |
最近记录: |