比较熊猫数据框,从其他数据框捕获数据

时间:2019-12-19 19:35:17

标签: python pandas dataframe

我不确定如何表达这个问题,但让我举个例子。我有2个熊猫数据框:

import pandas as pd

data1 = [['tom', '1000', 50], ['bill', '1001', 45], ['mike', '1002', 30], ['joe', '1003', 35]]
data2 = [['1000-000', 'New York'], ['1001-000', 'Los Angeles'], ['1005-000', 'Chicago'], ['1006-000', 'Atlanta']]

df1 = pd.DataFrame(data1, columns=['name', 'id', 'age'])
df2 = pd.DataFrame(data2, columns=['id #', 'city'])

两个数据框都有一个id列,我想比较一下。但我需要缩短df2的id列才能这样做:

df2['id shortened'] = df2['id'].str[:4]

现在,我比较df1中的id列和df2中的id shortened列:

df3 = df1[df1['id #'].isin(df2['id shortened'])]

如果我打印df3,结果如下:

   name    id  age
0   tom  1000   50
1  bill  1001   45

这很近,但是我真正想要的是:

   name    id  age       id #
0   tom  1000   50   1000-000
1  bill  1001   45   1001-000

id #是什么很重要,但是我不确定在比较两个数据帧时如何将其包括在结果中?

2 个答案:

答案 0 :(得分:2)

IIUC,您可以这样做:

df1.merge(df2.assign(id=df2['id #'].str.extract('^(.*)-')),
          on='id',
         )

输出:

   name    id  age      id #         city
0   tom  1000   50  1000-000     New York
1  bill  1001   45  1001-000  Los Angeles

答案 1 :(得分:1)

您要使用的是DataFrame.merge()方法:

>>> df2['id'] = df2['id #'].str[:4]
>>> df3 = df1.merge(df2, on='id')
>>> print(df3)

   name    id  age      id #         city
0   tom  1000   50  1000-000     New York
1  bill  1001   45  1001-000  Los Angeles

您需要将id shortened列命名为与您要在df1中合并的列相同的名称,本例中为id。如果您不希望使用诸如city之类的其他列,则可以随后使用DataFrame.drop('city', axis=1)将其删除。