Python 从给定多个索引的数据框中减去系列值

Python 从给定多个索引的数据框中减去系列值,python,pandas,join,dataframe,subtraction,Python,Pandas,Join,Dataframe,Subtraction,我在熊猫中有一个大数据框架,表a,结构如下: key1 key2 value1 1 201501 12 2 201502 4 3 201503 3 4 201506 9 5 201507 15 6 201509 nan 您可以使用多索引创建DataFrames,然后先用DataFrames进行减法运算: print (tableA

我在熊猫中有一个大数据框架,表a,结构如下:

key1 key2 value1 1 201501 12 2 201502 4 3 201503 3 4 201506 9 5 201507 15 6 201509 nan
您可以使用
多索引创建
DataFrames
,然后先用
DataFrames
进行减法运算:

print (tableA.set_index(['key1','key2'])
             .sub(tableB.set_index(['key1','key2']))
             .fillna(tableA.set_index(['key1','key2']))
             .reset_index())

   key1    key2  value1
0     1  201501     1.0
1     2  201502     4.0
2     3  201503     1.0
3     4  201506     9.0
4     5  201507     1.0
5     6  201509     NaN
另一个解决方案包括:


如果表A包含多个列,除了指定的三个列之外,上述是否成立?然后使用另一个
piRSquared
的解决方案。 key1 key2 value1 1 201501 1 2 201502 4 3 201503 1 4 201506 9 5 201507 1 6 201509 nan
import numpy as np

tableA= pd.DataFrame({'key1':[1,2,3,4,5,6],
                'key2':[201501,201502,201503,201506,201507,201509],
                'value1':[12,4,3,9,15,np.nan]
                })



tableB= pd.DataFrame({'key1':[1,3,5],
                'key2':[201501,201503,201507],
                'value1':[11,2,14]
                })
print (tableA.set_index(['key1','key2'])
             .sub(tableB.set_index(['key1','key2']))
             .fillna(tableA.set_index(['key1','key2']))
             .reset_index())

   key1    key2  value1
0     1  201501     1.0
1     2  201502     4.0
2     3  201503     1.0
3     4  201506     9.0
4     5  201507     1.0
5     6  201509     NaN
print (tableA.set_index(['key1','key2'])
             .sub(tableB.set_index(['key1','key2']))
             .combine_first(tableA.set_index(['key1','key2']))
             .reset_index())

   key1    key2  value1
0     1  201501     1.0
1     2  201502     4.0
2     3  201503     1.0
3     4  201506     9.0
4     5  201507     1.0
5     6  201509     NaN
tableA.set_index(keys).value1 \
    .sub(tableB.set_index(keys).value1, fill_value=0) \
    .reset_index()