【发布时间】:2015-11-02 17:20:25
【问题描述】:
我有时遇到的一种情况是,我有两个数据框(df1,df2),我想根据df1 和@987654325 之间的多列的交集创建一个新的数据框(df3) @。
例如,我想通过按列Campaign 和Group 过滤df1 来创建df3。
import pandas as pd
df1 = pd.DataFrame({'Campaign':['Campaign 1', 'Campaign 2', 'Campaign 3', 'Campaign 3', 'Campaign 4'], 'Group':['Some group', 'Arbitrary Group', 'Group 1', 'Group 2', 'Done Group'], 'Metric':[245,91,292,373,32]}, columns=['Campaign', 'Group', 'Metric'])
df2 = pd.DataFrame({'Campaign':['Campaign 3', 'Campaign 3'], 'Group':['Group 1', 'Group 2'], 'Metric':[23, 456]}, columns=['Campaign', 'Group', 'Metric'])
df1
Campaign Group Metric
0 Campaign 1 Some group 245
1 Campaign 2 Arbitrary Group 91
2 Campaign 3 Group 1 292
3 Campaign 3 Group 2 373
4 Campaign 4 Done Group 32
df2
Campaign Group Metric
0 Campaign 3 Group 1 23
1 Campaign 3 Group 2 456
我知道我可以通过合并来做到这一点...
df3 = df1.merge(df2, how='inner', on=['Campaign', 'Group'], suffixes=('','_del'))
#df3
Campaign Group Metric Metric_del
0 Campaign 3 Group 1 292 23
1 Campaign 3 Group 2 373 456
但是我必须弄清楚如何drop 以_del 结尾的列。我猜是这样的:
df3.select(lambda x: not re.search('_del', x), axis=1)
##The result I'm going for but required merge, then select (2-steps)
Campaign Group Metric
0 Campaign 3 Group 1 292
1 Campaign 3 Group 2 373
问题
我主要感兴趣的是返回df1,它只是根据df2 的Campaign|Group 值进行过滤。
有没有一种更好的方式来返回
df1而不诉诸merge?有没有办法
merge但不将df2的列返回到merge并且只返回df1的列?
【问题讨论】: