我有一个下面的数据框架,我转换成pandas透视表有两个索引“日期”和“评级。值排序在列A,B和C。x1c 0d1x的数据我想找到一个解决方案,它将减去每个列的值和连续几天的评级。比如,从03/01/2007到02/01/2007的评级M的A变化将是0.4179 - 0.4256 = -0.0077。减法不会总是在一天的差异上执行。但它总是(新日期-旧日期)。我正在寻找的结果可以在下表中找到:
0.4179 - 0.4256 = -0.0077
的
wbgh16ku1#
如果你的嵌套结构正确排序(或者使用df.sort_values('Date')),你可以使用groupby_diff:
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)
型
1条答案
按热度按时间wbgh16ku1#
如果你的嵌套结构正确排序(或者使用
df.sort_values('Date')
),你可以使用groupby_diff
:字符串
输出量:
型
如果你不知道你有多少列,你可以试试:
型