用另一个 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 的值的主要内容,如果未能解决你的问题,请参考以下文章