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

python-对来自2个数据帧的多个列进行条件填充,python,pandas,fillna,Python,Pandas,Fillna,我有2个数据帧,我想用df2中的数据填充下面df1中的na,但团队列是否与df2中的h或v列匹配: 换句话说,用df2中的值填充df1['temp'、'wspd'、'cond'],其中df1['team']==df2['h']或df2['v'] df1: df2: 我将首先重塑df2,使v列和h列在一列中,然后将该列设置为索引: df2 = df2.melt(value_vars=['v','h'], \ id_vars=['temp','humd','wspd','cond'], valu

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

换句话说,用df2中的值填充df1['temp'、'wspd'、'cond'],其中df1['team']==df2['h']或df2['v']

df1:

df2:


我将首先重塑df2,使v列和h列在一列中,然后将该列设置为索引:

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:

哦,哇。我从来没用过,也没见过。太棒了。谢谢你教我新东西!
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 = 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
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