首页 > 解决方案 > 通过仅选择特定列来减去两个数据框

问题描述

我有两个数据框df1df2如下所示:

   round  fouls  goals  team_id
0      1     15      1      262
1      1     10      2      263
2      1      5      0      315
3      1      7      3      316

   round  fouls  goals  team_id
0      2     23      3      262
1      2     13      5      263
2      2     11      3      315
3      2     19      5      316

我想要做的是执行减法,例如df3 = df2 - df1. 但是我想只减去foulsandgoals列并保持roundandteam_id列不变。

如果我执行df3 = df2 - df1,我会得到:

   round  fouls  goals  team_id
0      1      8      2        0
1      1      3      3        0
2      1      6      3        0
3      1     12      2        0

我该怎么做才能获得以下信息:

   round  fouls  goals  team_id
0      2      8      2      262
1      2      3      3      263
2      2      6      3      315
3      2     12      2      316

提前致谢。

标签: pythonpandasdataframe

解决方案


您可以在列表中指定减法列:

cols = ['fouls','goals']
df2[cols] = df2[cols]- df1[cols]
print (df2)
   round  fouls  goals  team_id
0      2      8      2      262
1      2      3      3      263
2      2      6      3      315
3      2     12      2      316

或为排除列名称指定列,并Index.difference为减去列指定列:

exclude = ['round','team_id']
cols = df1.columns.difference(exclude)
df2[cols] = df2[cols]- df1[cols]
print (df2)
   round  fouls  goals  team_id
0      2      8      2      262
1      2      3      3      263
2      2      6      3      315
3      2     12      2      316

对于新的 DataFrame 使用:

df3 = df2.copy()
cols = df1.columns.difference(['round','team_id'])
df3[cols] = df2[cols]- df1[cols]
print (df3)
   round  fouls  goals  team_id
0      2      8      2      262
1      2      3      3      263
2      2      6      3      315
3      2     12      2      316

推荐阅读