【问题标题】:Replace values of DataFrame by values of another Dataframe用另一个 DataFrame 的值替换 DataFrame 的值
【发布时间】:2021-09-28 03:25:09
【问题描述】:

我想用另一个 DataFrame 的值替换一个 DataFrame 的值(不一定是相同的大小)。

df1:
       Ticker  A  B   C  D  E
Date   Symbol
Nov 12   Y    Nan 1  Nan 1  1
Dec 1    Y    Nan Nan 1  1  1
Dec 5    Y     1  Nan 1  1 Nan 
Dec 8    Y    Nan Nan 1  1  1


df2:
Ticker    A  B   C  D  E
Date   
Nov 12    12  42  10 15 16
Nov 13    14  45  11 14 18
Nov 14    12  42  19 22 20  
...               ...
Dec 1     12  46  11 12 17
Dec 5     19  49  13 13 15
Dec 8     11  41  10 15 10

我想用 df2 中的相应值替换 df1 中的有效值(即替换 1)。我想返回以下 DataFrame:

df3:

       Ticker  A  B   C    D    E
Date   Symbol
Nov 12   Y    Nan 42  Nan  15   16
Dec 1    Y    Nan Nan 11   12   17
Dec 5    Y     19 Nan 13   13   Nan 
Dec 8    Y    Nan Nan 10   15   10

我试图将它们相乘,但 df1 是一个多索引。提前谢谢你。

【问题讨论】:

    标签: pandas dataframe replace mapping multi-index


    【解决方案1】:

    您可以将df.updatefilter_func 一起使用,以检查要更新的值是否等于1。这要求数据框具有匹配的索引列(日期)。一个工作示例:

    import numpy as np
    import pandas as pd
    
    df1 = pd.DataFrame({'Date': {1: 'Nov 12', 2: 'Dec 1', 3: 'Dec 5', 4: 'Dec 8'}, 'Symbol': {1: 'Y', 2: 'Y', 3: 'Y', 4: 'Y'}, 'A': {1: np.nan, 2: np.nan, 3: 1.0, 4: np.nan}, 'B': {1: 1.0, 2: np.nan, 3: np.nan, 4: np.nan}, 'C': {1: np.nan, 2: 1.0, 3: 1.0, 4: 1.0}, 'D': {1: 1.0, 2: 1.0, 3: 1.0, 4: 1.0}, 'E': {1: 1.0, 2: 1.0, 3: np.nan, 4: 1.0}})
    df2 = pd.DataFrame({'Date': {1: 'Nov 12', 2: 'Nov 13', 3: 'Nov 14', 4: 'Dec 1', 5: 'Dec 5', 6: 'Dec 8'}, 'A': {1: 12, 2: 14, 3: 12, 4: 12, 5: 19, 6: 11}, 'B': {1: 42, 2: 45, 3: 42, 4: 46, 5: 49, 6: 41}, 'C': {1: 10, 2: 11, 3: 19, 4: 11, 5: 13, 6: 10}, 'D': {1: 15, 2: 14, 3: 22, 4: 12, 5: 13, 6: 15}, 'E': {1: 16, 2: 18, 3: 20, 4: 17, 5: 15, 6: 10}})
    
    df1 = df1.set_index('Date')
    df2 = df2.set_index('Date')
    
    df1.update(df2, filter_func=lambda x: x == 1)
    

    输出df1:

    Date Symbol A B C D E
    Nov 12 Y nan 42 nan 15 16
    Dec 1 Y nan nan 11 12 17
    Dec 5 Y 19 nan 13 13 nan
    Dec 8 Y nan nan 10 15 10

    附言。如果多索引抛出错误,请尝试flattening 列标题。

    【讨论】:

      猜你喜欢
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 2016-02-17
      • 1970-01-01
      • 2022-01-06
      相关资源
      最近更新 更多