我有一个特定的数据帧(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 中更改它们?
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