我有2个数据帧,df1
是:
Jan17 Jun18 Dec18 Apr19
ID Name
0 Nick 10.0 1.7 3.7 0.0
1 Jack 10.0 0.0 2.8 3.5
2 Fox 10.0 1.7 0.0 0.0
3 Rex 1.0 0.0 3.0 4.2
第二个DataFrame-df2
是:
Jan17 Jun18 Dec18 Apr19
ID Name
0 Nick 5.0 1.7 2.0 0.0
1 Jack 6.0 0.0 0.8 3.5
2 Fox 8.0 5.0 0.0 0.0
3 Rex 1.0 0.0 1.0 4.2
4 Snack 3.1 9.0 2.8 4.4
5 Yosee 4.3 0.0 0.0 4.3
6 Petty 0.5 1.3 2.8 3.5
7 Lind 3.6 7.5 2.8 4.3
8 Korr 0.6 1.5 1.8 2.3
结果为df3
:
ID Name Jan17 Jun18 Dec18 Apr19
0 Nick 5.0 0 1.7 0
1 Jack 4.0 0 2.0 0
2 Fox 2.0 -3.3 0 0
3 Rex 0 0 2.0 0
如何基于df1
中的df2
多索引计算[ID, Name]
和df1
中各列之间的差异并将结果保存到df3
? / p>
任何想法,我将不胜感激。谢谢!
答案 0 :(得分:2)
只需减去,减法就在索引上对齐。您可以在减去之前重新索引df2
,以避免出现NaN:
# df1 - df2.reindex(df1.index)
df1.sub(df2.reindex(df1.index))
Jan17 Jun18 Dec18 Apr19
ID Name
0 Nick 5.0 0.0 1.7 0.0
1 Jack 4.0 0.0 2.0 0.0
2 Fox 2.0 -3.3 0.0 0.0
3 Rex 0.0 0.0 2.0 0.0
请注意,我之所以选择reindex
而不是loc
是为了避免缺少索引值的KeyError
。
在上述情况下,第一个解决方案将生成NaN,因此您可以将fill_values
设置为reindex
,以确保返回df1
的值(而不是NaN):>
df2.reindex(df1.index, fill_value=0)
Jan17 Jun18 Dec18 Apr19
ID Name
0 Nick 5.0 1.7 2.0 0.0
1 Jack 6.0 0.0 0.8 3.5
2 Fox 8.0 5.0 0.0 0.0
3 Rex 1.0 0.0 1.0 4.2
答案 1 :(得分:2)
您可以轻松完成
df1-df2.loc[df1.index]
输出:
Jan17 Jun18 Dec18 Apr19
ID Name
0 Nick 5.0 0.0 1.7 0.0
1 Jack 4.0 0.0 2.0 0.0
2 Fox 2.0 -3.3 0.0 0.0
3 Rex 0.0 0.0 2.0 0.0
答案 2 :(得分:1)
尝试一些新的东西
sum(df1.align(0-df2,join='left'))
Out[282]:
Jan17 Jun18 Dec18 Apr19
ID Name
0 Nick 5.0 0.0 1.7 0.0
1 Jack 4.0 0.0 2.0 0.0
2 Fox 2.0 -3.3 0.0 0.0
3 Rex 0.0 0.0 2.0 0.0