根据另一列从两个数据框中选择列

时间:2017-05-12 06:39:34

标签: python pandas

我有2个数据帧,其中一个包含一些关于足球运动员的一般信息,其中第二个包含其他信息,例如为每个球员赢得比赛。他们都有" id"柱。但是,它们的长度不一样。

我想要做的是创建一个包含2列的新数据框:" x"从第一个数据帧和" y"来自第二个数据帧,仅限于" id"列在两个数据框中包含相同的值。因此,我可以匹配" x"和" y"属于同一个人的列。

我尝试使用concat函数执行此操作:

pd.concat([firstdataframe['x'], seconddataframe['y']], axis=1, keys=['x', 'y'])

但我没有设法知道如何应用" id"在两个数据帧中都是相同的。

1 个答案:

答案 0 :(得分:1)

您似乎需要使用默认inner加入mergeid列中的每个值都必须是唯一的:

df = pd.merge(df1[['id','x']], df2[['id','y']], on='id')

样品:

df1 = pd.DataFrame({'id':[1,2,3],'x':[4,3,8]})
print (df1)
   id  x
0   1  4
1   2  3
2   3  8

df2 = pd.DataFrame({'id':[1,2],'y':[7,0]})
print (df2)
   id  y
0   1  7
1   2  0

df = pd.merge(df1[['id','x']], df2[['id','y']], on='id')
print (df)
   id  x  y
0   1  4  7
1   2  3  0

使用concat的解决方案是可行的,但有点复杂,因为需要使用inner join加入索引:

df = pd.concat([df1.set_index('id')['x'], 
                df2.set_index('id')['y']], axis=1, join='inner')
       .reset_index()
print (df)
   id  x  y
0   1  4  7
1   2  3  0

编辑:

如果id不是唯一的,则重复项会创建所有组合并展开输出dataframe

df1 = pd.DataFrame({'id':[1,2,3],'x':[4,3,8]})
print (df1)
   id  x
0   1  4
1   2  3
2   3  8

df2 = pd.DataFrame({'id':[1,2,1,1],'y':[7,0,4,2]})
print (df2)
   id  y
0   1  7
1   2  0
2   1  4
3   1  2

df = pd.merge(df1[['id','x']], df2[['id','y']], on='id')
print (df)
   id  x  y
0   1  4  7
1   1  4  4
2   1  4  2
3   2  3  0