Просто вычитайте, вычитание выравнивается по индексу.Вы можете переиндексировать 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
over loc
, заключалась в том, чтобы избежать KeyError
s, если отсутствуют значения индекса.
В приведенном выше примере первое решение будет генерировать 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