第一和第二数据帧如下:
import pandas as pd
d = {'0': [2154,799,1023,4724], '1': [27, 2981, 952,797],'2':[4905,569,4767,569]}
df1 = pd.DataFrame(data=d)
和
d={'PART_NO': ['J661-03982','661-08913', '922-8972','661-00352','661-06291',''], 'PART_NO_ENCODED': [2154,799,1023,27,569]}
df2 = pd.DataFrame(data=d)
我想为df1中的每一行获取相应的part_no,因此生成的数据帧应如下所示:
d={'PART_NO': ['J661-03982','661-00352',''], 'PART_NO_ENCODED': [2154,27,4905]}
df3 = pd.DataFrame(data=d)
我可以这样实现:
df2.set_index('PART_NO_ENCODED').reindex(df1.iloc[0,:]).reset_index().rename(columns={0:'PART_NO_ENCODED'})
但是我不想一次传递reindex(df1.iloc[0,:])
一个值为0.1的值,而是想为df1中的所有行获取对应的part_no。请帮忙吗?
答案 0 :(得分:0)
您可以将第二个数据框用作替换字典:
df3 = df1.replace(df2.set_index('PART_NO_ENCODED').to_dict()['PART_NO'])
不在df2
中的值将不会被替换。它们必须被识别并丢弃:
df3 = df3[df1.isin(df2['PART_NO_ENCODED'].tolist())]
# 0 1 2
#0 J661-03982 661-00352 NaN
#1 661-08913 NaN 661-06291
#2 922-8972 NaN NaN
#3 NaN NaN 661-06291
您以后可以用''
替换缺少的值,或者用fillna
替换您选择的任何其他值。