python - 以2个数据帧中的多列为条件的fillna

时间:2017-10-25 17:35:48

标签: python pandas fillna

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

所以换句话说就是df1 [' temp',' wspd',' cond']的填充物与df2中的那些值,其中df1 ['团队'] == 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

1 个答案:

答案 0 :(得分:1)

我会先解决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