python - 根据来自 2 个数据帧的多列的条件进行填充

python - fillna on conditional of multiple columns from 2 dataframes

我有 2 个数据框,我想用 df2 中的数据填充下面 df1 中的 na,但团队列是否匹配 df2 中的 h 或 v 列:

所以换句话说,df1['temp'、'wspd'、'cond'] 的 fillna 和 df2 中的那些值,其中 df1['team'] == df2['h'] 或 df2['v']

df1:

team        day    temp      ou      wspd     cond
CIN         SUN     nan     42.0     nan      nan
 KC         MN      nan     43.5     nan      nan
IND         SUN     nan     42.0     nan      nan
CIN         SUN     nan     42.0     nan      nan
SEA         SUN     nan     45.5     nan      nan
PIT         SN      nan     45.0     nan      nan
MIA         THU     nan     37.5     nan      nan
DEN         MN      nan     43.5     nan      nan
NYJ         SUN     nan     46.5     nan      nan
CAR         SUN     nan     44.5     nan      nan
LAC         SUN     nan     48.0     nan      nan
MIN         SUN     nan     45.0     nan      nan
NO          SUN     nan     48.5     nan      nan
NYJ         SUN     nan     46.5     nan      nan
CLE         SUN     nan     37.5     nan      nan
OAK         SUN     nan     45.5     nan      nan
CAR         SUN     nan     44.5     nan      nan
OAK         SUN     nan     45.5     nan      nan
...         ...     ...      ...    ...       ...

df2:

v     h     temp    humd     wspd    cond
MIA  BAL    60.0    41.0    12.0    Mostly Sunny
MIN  CLE    47.0    58.0    14.0    Cloudy
CHI  NO     70.0    0.0      0.0    Dome
ATL  NYJ    66.0    83.0    17.0    Rain
IND  CIN    44.0    58.0    12.0    Cloudy
SF   PHI    65.0    81.0    11.0    Rain
OAK  BUF    49.0    65.0    9.0     Cloudy
LAC  NE     64.0    75.0    13.0    Showers
CAR  TB     67.0    59.0    17.0    Partly Cloudy
HOU  SEA    58.0    73.0    4.0     Cloudy
DAL  WAS    58.0    66.0    6.0     Rain
PIT  DET    70.0    0.0      0.0    Dome
DEN  KC     55.0    40.0    12.0    Partly Cloudy

我会通过首先重塑 df2 使列 vh 在一列中来解决这个问题,然后将该列设置为索引:

df2 = df2.melt(value_vars=['v','h'], \
  id_vars=['temp','humd','wspd','cond'], value_name='team').set_index('team')
#       temp  humd  wspd           cond variable
# team                                          
# MIA   60.0  41.0  12.0   Mostly Sunny        v
# MIN   47.0  58.0  14.0         Cloudy        v
# CHI   70.0   0.0   0.0           Dome        v
# ATL   66.0  83.0  17.0           Rain        v
# IND   44.0  58.0  12.0         Cloudy        v

从那里,您可以将 team 设置为 df 中的索引并使用 df.update:

df1.set_index('team', inplace=True)
df1.update(df2[['temp', 'wspd', 'cond']])
#       day  temp    ou  wspd           cond
# team                                      
# CIN   SUN  44.0  42.0  12.0         Cloudy
# KC     MN  55.0  43.5  12.0  Partly Cloudy
# IND   SUN  44.0  42.0  12.0         Cloudy
# CIN   SUN  44.0  42.0  12.0         Cloudy
# SEA   SUN  58.0  45.5   4.0         Cloudy