根据列从另一个数据框中填充 NaN

Fill NaN from another adataframe based on a column

我有一个形状为 (23251, 8) 的数据框和另一个形状为 (3652, 14) 的数据框。第一个数据框中的 DATE 列包含从 1955-01-01 到 2020-12-31 的日期,第二个数据框中的 DATA 列包含从 2010-01-01 到 2019-12-31.In 第一个数据框的日期大多数列包含很少或很多缺失值。我想根据日期(其中第二个数据帧中的日期与第一个数据帧中的日期相匹配)从第二个数据帧中填充第一个数据帧中的缺失值(只要可能)。

第一个数据框:

第二个数据框:

为了清楚起见,如果引用日期从 2010-01-01 到 2019-12-31 的行(来自第一个数据帧)在 PRCP、TAVG、TMAX 列和 TMIN 中包含 NaN 到根据每行中的日期在两个数据帧之间匹配的标准,用第二个数据帧的值填充。

没有样本作为纯文本数据,很难帮到你。也许这应该有效:

COLS = ['TMIN', 'TMAX']
df1 = df1.fillna(df2.set_index('DATE').reindex(df1['DATE'])[COLS] \
         .reset_index(drop=True))
print(df1)

# Output
         DATE NAME  TMIN  TMAX
0  1955-01-01    L  28.0  40.0
1  1955-01-02    L  27.0  41.0
2  1955-01-03    L   NaN   NaN
3  1955-01-01    M  28.0  40.0
4  1955-01-02    M  27.0  41.0
5  1955-01-03    M   NaN   NaN

设置:

import pandas as pd
import numpy as np

d1 = {'DATE': ['1955-01-01', '1955-01-02', '1955-01-03',
               '1955-01-01', '1955-01-02', '1955-01-03'],
               'NAME': ['L', 'L', 'L', 'M', 'M', 'M'],
               'TMIN': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
               'TMAX': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]}
df1 = pd.DataFrame(d1)

d2 = {'DATE': ['1955-01-01', '1955-01-02'], 'TMIN': [28, 27], 'TMAX': [40, 41]}
df2 = pd.DataFrame(d2)

print(df1)
print(df2)

# Output
         DATE NAME  TMIN  TMAX
0  1955-01-01    L   NaN   NaN
1  1955-01-02    L   NaN   NaN
2  1955-01-03    L   NaN   NaN
3  1955-01-01    M   NaN   NaN
4  1955-01-02    M   NaN   NaN
5  1955-01-03    M   NaN   NaN


         DATE  TMIN  TMAX
0  1955-01-01    28    40
1  1955-01-02    27    41