用另一个 DataFrame 的值替换 DataFrame 的值

Posted

技术标签:

【中文标题】用另一个 DataFrame 的值替换 DataFrame 的值【英文标题】:Replace values of DataFrame by values of another 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 是一个多索引。提前谢谢你。

【问题讨论】:

【参考方案1】:

您可以将df.update 与filter_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 列标题。

【讨论】:

以上是关于用另一个 DataFrame 的值替换 DataFrame 的值的主要内容,如果未能解决你的问题,请参考以下文章

PHP - 用另一个数组替换数组的值

用另一个文件中指定的值替换字段

PySpark 将低于计数阈值的值替换为值

Python Numpy:用另一个数组中的对应值替换一个数组中的值

用另一列中的值替换缺失值

用另一个表中同一列的值替换列中的字符串值