我有2个数据帧,其中一个包含一些关于足球运动员的一般信息,其中第二个包含其他信息,例如为每个球员赢得比赛。他们都有" id"柱。但是,它们的长度不一样。
我想要做的是创建一个包含2列的新数据框:" x"从第一个数据帧和" y"来自第二个数据帧,仅限于" id"列在两个数据框中包含相同的值。因此,我可以匹配" x"和" y"属于同一个人的列。
我尝试使用concat函数执行此操作:
pd.concat([firstdataframe['x'], seconddataframe['y']], axis=1, keys=['x', 'y'])
但我没有设法知道如何应用" id"在两个数据帧中都是相同的。
答案 0 :(得分:1)
您似乎需要使用默认inner
加入merge
,id
列中的每个值都必须是唯一的:
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