根据列从另一个数据框中填充 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
我有一个形状为 (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