【发布时间】:2019-10-20 00:24:54
【问题描述】:
我有 2 个数据框要合并在一起。在 df1 中,它的“id”为 A、B、C……,而在 df2 中,“id”为 A1、A2、A3、……、B1、B2、B3……我想合并他们的条件是df1.id in df2.id。我查看了教程,搜索了 StackOverflow,但没有看到任何相关内容。
df1 的键是 df2 中的键的子集。所以一个简单的 pd.merge(df1, df2, on='id', how...) 会导致数据框不正确。
设置:
dummy_data1 = {
'id': ['A', 'B', 'C', 'D', 'E'],
'Feature1': ['1', '2', '3', '4', '5'],
'Feature2': ['6', '7', '8', '9', '10']}
dummy_data2 = {
'id': ['A1', 'A2', 'A3', 'B1', 'B2'],
'Feature1': ['a', 'b', 'c', 'd', 'e'],
'Feature2': ['f', 'g', 'h', 'i', 'j']}
df1 = pd.DataFrame(dummy_data1, columns = dummy_data1.keys())
df2 = pd.DataFrame(dummy_data2, columns = dummy_data2.keys())
期望的输出:
id Feature1_x Feature2_x Feature1_y Feature2_y
0 A1 1 6 a f
1 A2 1 6 b g
2 A3 1 6 c h
3 B1 2 7 d i
4 B2 2 7 e j
尝试 1:
newdf = pd.merge(df1['id'], df2['id'], on='id', how='inner')
结果 1:
Empty DataFrame
Columns: [id]
Index: []
尝试 2:
newdf = pd.merge(df1['id'], df2['id'], on='id', how='outer')
结果 2:
id
0 A
1 B
2 C
3 D
4 E
5 A1
6 A2
7 A3
8 B1
9 B2
尝试 3:
newdf = pd.merge(df1['id'], df2['id'].str[:1], on='id', how='inner')
结果 3:
id
0 A
1 A
2 A
3 B
4 B
【问题讨论】:
-
Pandas Merging 101 的可能副本 看看这个,它会回答你的问题,你需要决定是否要进行内连接、外连接或左连接
-
这个也很简单
pd.merge(df1['id'], df2['id'], on='id',how...)good luck -
这些都没有回答我的问题。
on='id', how...是不够的,因为这两个 id 不相等,但一个是另一个的子集。这就是为什么我需要string1 in string2条件。 -
你能拿一片 df2 id 来做合并吗?
pd.merge(df1['id'], df2['id'].str[:6], on='id',how...) -
我尝试了您的建议,并让子字符串部分返回,但我需要超字符串。我需要
A1, A2, A3...在生成的df 中,而不仅仅是A, A, A,...。
标签: python pandas dataframe join merge