【问题标题】:Subtract series value from pandas data frame given multiple index从给定多个索引的熊猫数据框中减去系列值
【发布时间】:2016-08-16 07:07:21
【问题描述】:

我在 Pandas 中有一个大数据框,table A,结构如下:

键1 键2 值1 1 201501 12 2 201502 4 3 201503 3 4 201506 9 5 201507 15 6 201509 楠

table A,colum value1,我想从 table B 中减去 value2,外观如下,使用 key1key2 作为连接键:

键1 键2 值2 1 201501 11 3 201503 2 5 201507 14

我想要 table A 中的以下内容:

键1 键2 值1 1 201501 1 2 201502 4 3 201503 1 4 201506 9 5 201507 1 6 201509 楠

我怎样才能以超高效的方式实现这一目标?今天我将这两个表和A 中的 value1B 中的 value2 合并在一起,我的问题是这是否可以用更智能的 pythonic“look- up”的时尚,哪个更时尚更小巧?

下面的数据框代码

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]
                })

【问题讨论】:

    标签: python pandas join dataframe subtraction


    【解决方案1】:
    tableA.set_index(keys).value1 \
        .sub(tableB.set_index(keys).value1, fill_value=0) \
        .reset_index()
    

    【讨论】:

      【解决方案2】:

      您可以用set_indexMultiIndexes 创建DataFrames,然后用subfillna 减去第一个DataFrame

      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
      

      combine_first 的另一个解决方案:

      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
      

      【讨论】:

      • 如果表 A 包含除指定的三列之外的多列,上述情况是否成立?
      • 然后使用另一个piRSquared的解决方案。
      猜你喜欢
      • 2020-07-06
      • 2013-12-04
      • 2013-12-10
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      相关资源
      最近更新 更多