在python中使用iloc和函数

时间:2018-04-10 16:01:58

标签: python pandas

我试图将正确的FinalZone从df5分配到df7。

df7:

 OrigZone    DestZone    FinalZone
 5           6           (output should be 9)
 8           5           (output should be 2)   

df5(FinalZone查找表):

  Zip3 1  2  3  4  5  6
     5 7  2  3  5  8  9
     6 3  1  5  8  8  8
     7 3  3  8  8  9  1
     8 5  5  6  6  2  2

def zone_assign(row):
    return df5.iloc[df5.loc[df5['ZIP3']==row['OrigZone']].index,row['DestZone']] 

df7.apply(zone_assign, axis=1)

当我跑这个时,我得到了一张打印输出我的df5,里面有一堆NaN。我迷路了。

2 个答案:

答案 0 :(得分:2)

我认为你需要lookup

#df5=(df5.set_index('Zip3'))
#df5.columns=df5.columns.astype(int)

df7['FinalZone']=df5.lookup(df7.OrigZone,df7.DestZone) 

df7
Out[130]: 
   OrigZone  DestZone  FinalZone
0         5         6          9
1         8         5          2

答案 1 :(得分:1)

这是一种方法,假设您的df5列是整数。

df7['FinalZone'] = df7.apply(lambda x: df5.loc[x['OrigZone'], x['DestZone']], axis=1)

print(df7)

#    OrigZone  DestZone  FinalZone
# 0         5         6          9
# 1         8         5          2