Python 如何处理带有负值的pct_变化

Python 如何处理带有负值的pct_变化,python,pandas,Python,Pandas,我正在计算面板数据集的百分比变化,该数据集具有正值和负值。如果n和n+1 date的值都是负值,并且n>n+1,例如,n=-2,n+1=-4。计算的百分比变化为((n+1)-n)/n=(-4)-(2))/-2=1。正如你所看到的,这种变化应该是一种下降趋势,预计是负面的,但结果却是相反的。我通常在其他软件中设置分母绝对值((n+1)-n)/abs(n),以确保趋势的方向。只是想知道我是否可以在Python中设置分母为绝对值。非常感谢。我已经根据利奥的回答解决了这个问题 这里是一个数据示例,如果你

我正在计算面板数据集的百分比变化,该数据集具有正值和负值。如果n和n+1 date的值都是负值,并且n>n+1,例如,n=-2,n+1=-4。计算的百分比变化为((n+1)-n)/n=(-4)-(2))/-2=1。正如你所看到的,这种变化应该是一种下降趋势,预计是负面的,但结果却是相反的。我通常在其他软件中设置分母绝对值((n+1)-n)/abs(n),以确保趋势的方向。只是想知道我是否可以在Python中设置分母为绝对值。非常感谢。我已经根据利奥的回答解决了这个问题

这里是一个数据示例,如果你想玩的话

import pandas as pd
df= {'id':[1,1,2,2,3,3],'values':[-2,-4,-2,2,1,5]}
df=pd.DataFrame(data=df)
df['pecdiff']=(df.groupby('id')['values'].apply(lambda x:x.diff()/x.abs().shift()
)).fillna(method=bfill)

如果我理解正确,那么
预期更改
的行应该可以解决您的问题。为了比较,我把熊猫的方法和你需要的东西放在一起

以下代码:

import pandas as pd

df = pd.DataFrame([-2,-4,-2,2,1], columns = ['Values'])
df['pct_change'] = df['Values'].pct_change()

# This should help you out:
df['expected_change'] = df['Values'].diff() / df['Values'].abs().shift()
df
给出这个输出。请注意,第1行到第3行的符号不同

    Values  pct_change  expected_change
0       -2        NaN               NaN
1       -4        1.0              -1.0
2       -2       -0.5               0.5
3        2       -2.0               2.0
4        1       -0.5              -0.5

你能不能加上一个数字和预期的输出?在没有任何上下文的情况下,您似乎在寻找。描述非常清楚,Leo非常理解,并且已经解决了这个问题。您好,您知道groupby()如何使用吗?因为它是一个面板数据集。dfy1=df.groupby('id')['y1'].diff()/df['y1'].abs().shift().fillna(method='bfill')。to_frame()这解决了你的第二个问题吗?我不明白您需要什么以及“面板数据集”是什么意思。如果您仍然有问题,请按照@MrNobody33建议的方式编辑您的帖子,以便我们可以以与您相同的方式查看问题。Hi panel data是一个包含两个索引的数据集,例如日期、id。我的数据集太复杂,在此处发布示例将花费我更多的时间来组织它。这并没有解决我的第二个问题。我正试图自己解决它。@SHendricks你知道如何连接到groupby函数来完成上面的操作吗?