通过查找在数据框中插入数据

时间:2019-06-21 20:39:02

标签: python-3.x pandas

我有两个数据框

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)

2 个答案:

答案 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