【问题标题】:Update a column of a pandas DataFrame using a partial map使用部分映射更新 pandas DataFrame 的列
【发布时间】:2017-08-12 20:19:59
【问题描述】:

我有一个包含许多列的大型 DataFrame。我还有一个带有两列的较小 DataFrame - 称它们为“标签”和“值”,它们都在较大的 DataFrame 中。我想用较小 DataFrame 的 'value' 列替换较大 DataFrame 的 'value' 列,对于较大 DataFrame 的行,其中 'label' 与较小 DataFrame 中的行匹配。

for 循环的逻辑是:

largeDF = pd.DataFrame([['a',1],['b',2],['c',3],['d',4],['e',5]], columns=['label','value']).set_index('label')
smallDF = pd.DataFrame([['d',6],['e',7]], columns=['label','value']).set_index('label')
for label in smallDF.index:
    largeDF.loc[label,'value'] = smallDF.loc[label,'value']

不幸的是

的明显答案
largeDF['value'] = smallDF['value']

不起作用,因为它会对不在小 DF 中的标签进行 NaN。使用 .map() 也有类似的问题。

我正在使用的 for 循环似乎非常不合 Python,unpandas 和缓慢。我想念的更好的方法是什么?

【问题讨论】:

    标签: python pandas dictionary dataframe indexing


    【解决方案1】:

    你可以使用combine_first:

    print (smallDF['value'].combine_first(largeDF['value']))
    label
    a    1.0
    b    2.0
    c    3.0
    d    6.0
    e    7.0
    Name: value, dtype: float64
    

    大家一起:

    largeDF = pd.DataFrame([['a',1],['b',2],['c',3],['d',4],['e',5]], columns=['label','value'])
                .set_index('label')
    largeDF['a'] = 1
    largeDF['b'] = 'f'
    smallDF = pd.DataFrame([['d',6],['e',7]], columns=['label','value']).set_index('label')
    print (largeDF)
           value  a  b
    label             
    a          1  1  f
    b          2  1  f
    c          3  1  f
    d          4  1  f
    e          5  1  f
    
    print (smallDF)
           value
    label       
    d          6
    e          7
    
    largeDF['value'] = smallDF['value'].combine_first(largeDF['value']).astype(int)
    print (largeDF)
           value  a  b
    label             
    a          1  1  f
    b          2  1  f
    c          3  1  f
    d          6  1  f
    e          7  1  f
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 2016-09-02
      • 2021-08-04
      • 2018-02-20
      • 1970-01-01
      • 2021-06-18
      • 2018-05-16
      相关资源
      最近更新 更多