【发布时间】:2017-01-21 03:51:15
【问题描述】:
我有两个不同的数据框:df1 和 df2
df1 :
Id lkey
0 foo foo
1 bar bar
2 baz baz
3 foo foo
4 bar bar
5 foo foo
6 bar bar
7 bar bar
8 bar bar
df2 :
e rkey value y
0 aaa foo aaa foo
1 NaN bar bbb bar
2 ccc baz ccc baz
3 NaN mac ddd fff
4 NaN xyz eee mmm
5 NaN mnb fff NaN
6 NaN foo aaa NaN
Edit1 : 添加第 6 行作为副本。
我想在这个数据帧上执行一项任务。我想比较 lkey 和 rkey 列。
编辑2:
注意: lkey 列包含所有重复值,rkey 列包含一些重复值。
获取 lkey 列的第一个值,即 foo 将此值与数据帧的 rkey 列的值进行比较。如果找到匹配项,我想知道 df1 数据框列名中该行的值列的值作为匹配项。 (在每种情况下,lkey 和 rkey 都会得到匹配,即 df1 中存在的任何 lkey 值在 df2 的 rkey 列中可用。)
我已经尝试过使用merge。
result = df1.merge(df2, left_on='lkey', right_on='rkey', how='outer')
输出:
Id lkey e rkey value y
0 foo foo aaa foo aaa foo
1 foo foo aaa foo aaa foo
2 foo foo aaa foo aaa foo
3 bar bar NaN bar bbb bar
4 bar bar NaN bar bbb bar
5 bar bar NaN bar bbb bar
6 bar bar NaN bar bbb bar
7 bar bar NaN bar bbb bar
8 baz baz ccc baz ccc baz
9 NaN NaN NaN mac ddd fff
10 NaN NaN NaN xyz eee mmm
11 NaN NaN NaN mnb fff NaN
我不想要 11 行。在我的 df1 中,只有 9 行可用于列 ID 和 lkey。我只想添加具有特定映射的匹配列。
预期输出:
Id lkey match
0 foo foo aaa
1 bar bar bbb
2 baz baz ccc
3 foo foo aaa
4 bar bar bbb
5 foo foo aaa
6 bar bar bbb
7 bar bar bbb
8 bar bar bbb
我怎样才能实现我想做的事?
编辑:之前我说 rkey 列包含唯一值,但我正因为如此而面临问题,rkey 列包含重复值。
【问题讨论】:
-
上述解决方案正是您要找的。这是一个基本的 sql 合并。
-
请参阅编辑并抱歉。刚才我明白了我的问题。