【发布时间】:2023-03-04 03:24:01
【问题描述】:
我正在尝试在 groupby 的结果上使用 pct_change 来计算许多不同项目之间的价值变化。
我的数据结构如下:
import numpy as np
arrays = [np.array([1,2,3,4,1,2,3,4]),np.array(['bar', 'bar', 'bar', 'bar', 'foo', 'foo', 'foo', 'foo'])]
s = pd.Series(np.array([100,101,102,103,200,201,202,203]), index=arrays)
s.name='values'
df = pd.DataFrame(s, index=arrays).sort_index()
df.index.names =['day','symbol']
我需要计算每天每个符号的百分比变化。当我运行这样的事情时:
df.groupby(level='symbol').values.diff()
我得到了正确的输出。但是当我运行这个时:
df.groupby(level='symbol').values.pct_change()
它返回错误的结果(比较 bar 和 foo)
我可以通过像这样包装一个 lambda 来得到我正在寻找的东西:
my_func = lambda x: x.pct_change()
df.groupby(level='symbol').values.apply(my_func)
或通过这样做:
df.groupby(level='symbol').values.diff() / df.groupby(level='symbol').values.shift(1)
所以我真的只是想了解 pct_change 与其他 pandas 方法的行为差异的原因。
【问题讨论】:
-
这很有趣。不知道这是否是一个错误。
-
@ScottBoston,这对我来说似乎是一个错误......
标签: pandas pandas-groupby