Python 从给定多个索引的数据框中减去系列值
我在熊猫中有一个大数据框架,表a,结构如下: key1 key2 value1 1 201501 12 2 201502 4 3 201503 3 4 201506 9 5 201507 15 6 201509 nanPython 从给定多个索引的数据框中减去系列值,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
您可以使用
多索引创建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()