【发布时间】:2017-09-16 07:37:02
【问题描述】:
我正在为一个非常具体的问题而苦苦挣扎。我有两个具有不同索引的不同长度的熊猫数据框。对于 df1 中包含的每个项目,我想查看 df2 并取几列(不包含在 df1 中),其中 df2 列之一的值等于 df1 中的值。示例:
import pandas as pd
data_1 = {'TARGET_NAME':['fishinghook', 'doorlock', 'penguin', 'ashtray', 'cat', 'elephant', 'cupcake', 'exercisebench'],
'FOOBAR':['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar'],
'ix':[320, 321, 322, 323, 324, 325, 326, 328]}
data_2 = {'IMAGE_NAME':['cat', 'penguin', 'jewelrybox', 'exercisebench', 'doorlock', 'jar', ],
'VALUES_1':['h', 'h', 'c', 'm', 'h', 'f'],
'VALUES_2':['hm', 'hl', 'cm', 'ml', 'hh', 'fl'],
'ix':[616, 617, 618, 619, 620, 621]}
desired = {'TARGET_NAME':['fishinghook', 'doorlock', 'penguin', 'ashtray', 'cat', 'elephant', 'cupcake', 'exercisebench'],
'FOOBAR':['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar'],
'PRODUCED_VALUES_1':['DROPPED', 'h', 'h', 'DROPPED', 'h', 'DROPPED', 'DROPPED', 'm'],
'ix':[320, 321, 322, 323, 324, 325, 326, 328]}
df1 = pd.DataFrame(data_1, index=data_1['ix'])
df2 = pd.DataFrame(data_2, index=data_2['ix'])
desired_df = pd.DataFrame(desired, index=desired['ix'])
df1
Out[2]:
FOOBAR TARGET_NAME ix
320 foo fishinghook 320
321 bar doorlock 321
322 foo penguin 322
323 bar ashtray 323
324 foo cat 324
325 bar elephant 325
326 foo cupcake 326
328 bar exercisebench 328
df2
Out[3]:
IMAGE_NAME VALUES_1 VALUES_2 ix
616 cat h hm 616
617 penguin h hl 617
618 jewelrybox c cm 618
619 exercisebench m ml 619
620 doorlock h hh 620
621 jar f fl 621
desired_df
Out[4]:
FOOBAR PRODUCED_VALUES_1 TARGET_NAME ix
320 foo DROPPED fishinghook 320
321 bar h doorlock 321
322 foo h penguin 322
323 bar DROPPED ashtray 323
324 foo h cat 324
325 bar DROPPED elephant 325
326 foo DROPPED cupcake 326
328 bar m exercisebench 328
我想查看 df1['TARGET_NAME'] 中的每个值,如果它等于 df2['IMAGE_NAME'],则从 df2 获取 VALUES_1 和 VALUES_2 列并将这些详细信息添加到 df1(或 df1 的副本) .如果它在 df2 中的任何地方都不匹配(因为位置也都不同),那么我希望它写一些别的东西(例如'DROPPED')。理想情况下,我希望 df1 索引保持不变。
任何帮助表示赞赏!
【问题讨论】: