我有一个 pandas 数据框(在 Python 2.7 中),在 Time 和 Rating 上有 2 级索引,Tenor 和 Value 是数据列:
Out[235]:
Tenor Value
Time Rating
2011-12-30 AAA 3M 0.343
AAA 6M 0.404
AAA 1Y 0.541
AAA 2Y 0.684
AAA 3Y 0.869
AAA 4Y 1.254
AAA 5Y 1.467
AAA 7Y 2.051
AAA 8Y 2.272
AAA 9Y 2.575
AAA 10Y 2.938
AAA 15Y 3.757
AAA 20Y 4.108
AAA 30Y 4.377
AA 3M 0.435
AA 6M 0.547
AA 1Y 0.620
AA 2Y 0.737
AA 3Y 0.925
AA 4Y 1.321
AA 5Y 1.545
AA 7Y 2.132
AA 8Y 2.420
AA 9Y 2.628
AA 10Y 3.108
AA 15Y 3.920
AA 20Y 4.219
AA 30Y 4.490
我有另一个数据框
In [237]: treasDF
Out[237]:
2013-09-20 12:01:00
1M 0.008
3M 0.013
6M 0.043
1Y 0.104
2Y 0.332
3Y 0.688
5Y 1.478
7Y 2.109
10Y 2.735
30Y 3.762
我需要从每个多索引级别中减去 treasDF
,- 我该怎么做?我尝试了所有类型的 groupby
并因错误而失败,例如
ratesDF.groupby(level=1).sub(treasDF.iloc[:,0], level=1)
谢谢。
最佳答案
我意识到这对聚会来说有点晚了,但是在尝试解决同样的问题时偶然发现了这个问题,我想我会留下我的解决方案以防其他人发现这个问题。
df1 = pd.DataFrame([[1, 2], [1, 2]], index=[0,1], columns=['a', 'b'])
mcols = pd.MultiIndex.from_product([['A', 'B'], ['a', 'b', 'c']])
df2 = pd.DataFrame([[1, 2, 3, 4, 5, 6], [1, 2, 3, 1, 2, 3]], index=[0,1], columns=mcols)
哪个给
df1
a b
0 1 2
1 1 2
df2
A B
a b c a b c
0 1 2 3 4 5 6
1 1 2 3 1 2 3
然后使用 substract() 并指定要广播的级别
df2.subtract(df1, level=1)
A B
a b c a b c
0 0 0 NaN 3 3 NaN
1 0 0 NaN 0 0 NaN
关于python - 减去 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20206204/