使用另一个数据帧更改特定数据帧的列

问题描述 投票:0回答:1

我有一个特定的数据帧(df1),其中包含名为“MP10”的变量的一些值。

df = data = {
  "day": [1, 2, 3, 4, 5, 6, 7],
  "month": [1, 1, 4, 4, 7, 7, 7],
  "year": [2015, 2015, 2016, 2017, 2017, 2019, 2019,],
  "mp10": [10, 15, 20, 5, 7, 14, 18]  
}

df1 = pd.DataFrame(df)
df1

但是,我必须更改特定日期的 NaN 值。 我创建了另一个数据框(df2)来查找这些特定的日期。

df = data = {
  "day": [2, 5, 7],
  "month": [1, 7, 7],
  "year": [2015, 2017, 2019,],
  "mp10": [np.NaN, np.NaN, np.NaN]  
}

df2 = pd.DataFrame(df)
df2

我认为使用 pd.merge,我可以更改值,但它不起作用。

如何从 df2 中选择 NaN 并在 df1 中更改它们?

python pandas
1个回答
0
投票

您可以使用

merge
indicator=True
来标识要删除的索引:

idx = (df1.reset_index()
       .merge(df2, on=['day', 'month', 'year'],
              how='left', indicator=True)
       .query('_merge == "both"')['index']
      )

df1.loc[idx, 'mp10'] = None

输出:

   day  month  year  mp10
0    1      1  2015  10.0
1    2      1  2015   NaN
2    3      4  2016  20.0
3    4      4  2017   5.0
4    5      7  2017   NaN
5    6      7  2019  14.0
6    7      7  2019   NaN
© www.soinside.com 2019 - 2024. All rights reserved.