我有两个这样的数据框:
import pandas as pd
left = pd.DataFrame({'id1': ['a', 'b', 'c'], 'val1': [1, 2, 3]})
right = pd.DataFrame({'ID2': ['a', 'c', 'd'], 'val2': [4, 5, 6]})
id1 val1
0 a 1
1 b 2
2 c 3
ID2 val2
0 a 4
1 c 5
2 d 6
我想合并这两个数据帧,进行内部合并,删除ID2
,然后使用id1
作为新索引。我想要的输出如下:
val1 val2
id1
a 1 4
c 3 5
我目前这样做如下:
res = pd.merge(left, right, left_on='id1', right_on='ID2', how='inner').drop('ID2', axis=1).set_index('id1')
给了我想要的输出。
我的问题是,是否已有一个允许我的选项
a)在执行内部合并时删除键列,因为那时将有两个相同的列
和/或
b)直接将索引设置为用于合并过程的其中一个关键列。
我现在的方式是现在的方式还是有更聪明/内置的东西吗?
答案 0 :(得分:3)
一个选项是在加入之前将键列设置为索引,这将在结果中仅保留一个键列作为索引:
left.set_index("id1").join(right.set_index("ID2"), how = "inner")
答案 1 :(得分:2)
您可以使用merge
参数left_index
和right_index
,(how='inner'
省略,因为默认值),但df
中的res = pd.merge(left.set_index('id1'),
right.set_index('ID2'),
left_index=True,
right_index=True)
print (res)
val1 val2
a 1 4
c 3 5
}:
join
使用set_index
的解决方案,必须为inner
加入添加参数res = pd.concat([left.set_index('id1'),
right.set_index('ID2')], axis=1, join='inner')
print (res)
val1 val2
a 1 4
c 3 5
:
ScheduledExecutorService
答案 2 :(得分:0)
在三种解决方案中,“合并”解决方案最快:
pd.merge(left.set_index('id1'), right.set_index('ID2'),left_index=True, right_index=True)
答案 3 :(得分:0)