我有两个数据框
a) df1 columns(origin, destination, miles)
b) df2 columns (place, some_value)
一个地方既可以是起点,也可以是目的地。 我想在df1中再插入两列; origin_value,destination_value(与df2中的some_value相等)匹配到与原点和目的地相同的位置。
所以结果将是这样
df1 columns (origin, destination, miles, origin_value, dest_value)
答案 0 :(得分:2)
您需要:
df1 = df1.merge(df2, how='left', left_on='origin', right_on='place').rename(columns = {'value':'origin_value'}).drop('place',1)
df1 = df1.merge(df2, how='left', left_on='destination', right_on='place').rename(columns = {'value':'dest_value'}).drop('place',1)
考虑以下示例:
df1 = pd.DataFrame({
'origin': ['a','b', 'c', 'b'],
'destination': ['b', 'c', 'a', 'a'],
'miles':[10,20,30,10]
})
df2 = pd.DataFrame({
'place': ['a', 'b', 'c'],
'value': [2000, 5000, 3000]
})
然后
df1 = df1.merge(df2, how='left', left_on='origin', right_on='place').rename(columns = {'value':'origin_value'}).drop('place',1)
df1 = df1.merge(df2, how='left', left_on='destination', right_on='place').rename(columns = {'value':'dest_value'}).drop('place',1)
输出:
origin destination miles origin_value dest_value
0 a b 10 2000 5000
1 b c 20 5000 3000
2 c a 30 3000 2000
3 b a 10 5000 2000
答案 1 :(得分:2)
replace
cols = ['origin', 'destination']
m = dict(zip(df2.place, df2.value))
df1.join(df1[cols].replace(m).add_suffix('_value'))
origin destination miles origin_value destination_value
0 a b 10 2000 5000
1 b c 20 5000 3000
2 c a 30 3000 2000
3 b a 10 5000 2000