多索引数据透视表的 Pandas 减法

问题描述 投票:0回答:1

我有一个以下数据框,我将其转换为具有两个索引“日期”和“评级”的 pandas 数据透视表。 这些值按 A、B 和 C 列排序。

我想找到一个解决方案,减去每列的值和连续天的评级。假设,从 03/01/2007 到 02/01/2007,评级 M 的 A 变化将是

0.4179 - 0.4256 = -0.0077
。减法并不总是针对一天的差异进行。但它永远是(新日期 - 旧日期)。

我正在寻找的结果可以在下表中找到:

python pandas dataframe pivot-table
1个回答
1
投票

如果您的数据框已正确排序(或使用

df.sort_values('Date')
),您可以使用
groupby_diff

# Replace ['A'] with ['A', 'B', 'C']
df['A_diff'] = df.groupby('Rating')['A'].diff().fillna(0)

输出:

>>> df
         Date Rating       A  A_diff
0  02/01/2007      M  0.4256  0.0000
1  02/01/2007     MM  0.4358  0.0000
2  02/01/2007    MMM  0.4471  0.0000
3  03/01/2007      M  0.4179 -0.0077
4  03/01/2007     MM  0.4325 -0.0033
5  03/01/2007    MMM  0.4476  0.0005
6  04/01/2007      M  0.4173 -0.0006
7  04/01/2007     MM  0.4316 -0.0009
8  04/01/2007    MMM  0.4469 -0.0007

如果您不知道自己有多少列,您可以尝试:

cols = df.columns[2:]
df[cols] = df.groupby('Rating')[cols].diff().fillna(0)
© www.soinside.com 2019 - 2024. All rights reserved.