我有两个 Dataframe ,我想在cols = ['male', 'age_cat', 'inpatient']
上进行合并,合并后,我想在每个 Dataframe 的左列和右列index
上进行重复数据消除。
答:
index male age_cat inpatient
6885 34273 0.0 3.0 1.0
10145 50273 0.0 1.0 0.0
6099 30258 0.0 1.0 0.0
10834 53697 0.0 1.0 0.0
15267 76649 1.0 0.0 0.0
10122 50155 1.0 1.0 0.0
9210 45680 0.0 0.0 0.0
446 2221 1.0 3.0 0.0
38 196 1.0 0.0 0.0
14757 73363 1.0 0.0 0.0
450 2237 0.0 0.0 0.0
9617 47684 0.0 1.0 0.0
5285 26349 0.0 3.0 0.0
5666 28006 0.0 0.0 0.0
487 2475 1.0 2.0 0.0
671 3406 0.0 1.0 0.0
13398 66352 1.0 1.0 0.0
15525 78429 1.0 0.0 0.0
2831 14047 1.0 0.0 0.0
13361 66208 0.0 2.0 0.0
B:
index male age_cat inpatient
99629 99629 0 0 0
39305 39305 1 0 1
168799 168799 1 0 0
25276 25276 0 0 0
9964 9964 1 2 1
5137 5137 1 0 1
158488 158488 1 0 0
94960 94960 0 0 0
8955 8955 0 0 0
190425 190425 0 0 0
所以,我做如下:
mp=a.merge(b, on = cols)
我得到了 Dataframe
议员:
index_x male age_cat inpatient index_y
0 76649 1.0 0.0 0.0 168799
1 76649 1.0 0.0 0.0 158488
2 196 1.0 0.0 0.0 168799
3 196 1.0 0.0 0.0 158488
4 73363 1.0 0.0 0.0 168799
5 73363 1.0 0.0 0.0 158488
6 78429 1.0 0.0 0.0 168799
7 78429 1.0 0.0 0.0 158488
8 14047 1.0 0.0 0.0 168799
9 14047 1.0 0.0 0.0 158488
10 45680 0.0 0.0 0.0 99629
11 45680 0.0 0.0 0.0 25276
12 45680 0.0 0.0 0.0 94960
13 45680 0.0 0.0 0.0 8955
14 45680 0.0 0.0 0.0 190425
15 2237 0.0 0.0 0.0 99629
16 2237 0.0 0.0 0.0 25276
17 2237 0.0 0.0 0.0 94960
18 2237 0.0 0.0 0.0 8955
19 2237 0.0 0.0 0.0 190425
20 28006 0.0 0.0 0.0 99629
21 28006 0.0 0.0 0.0 25276
22 28006 0.0 0.0 0.0 94960
23 28006 0.0 0.0 0.0 8955
24 28006 0.0 0.0 0.0 190425
这是所期望的。
为了检查预期的配对数,我首先检查特定条件:
In [124]: a[(a.male==1)&(a.age_cat==0)&(a.inpatient==0)]
Out[124]:
index male age_cat inpatient
15267 76649 1.0 0.0 0.0
38 196 1.0 0.0 0.0
14757 73363 1.0 0.0 0.0
15525 78429 1.0 0.0 0.0
2831 14047 1.0 0.0 0.0
以及
In [125]: b[(b.male==1)&(b.age_cat==0)&(b.inpatient==0)]
Out[125]:
index male age_cat inpatient
168799 168799 1 0 0
158488 158488 1 0 0
因此,我预计在重复数据消除后最多有两个匹配对,由此产生了我的问题:要对 Dataframe mp
中的索引index_x
和index_y
进行重复数据消除,我尝试了以下方法:
In [126]: mp[(~mp['index_x'].duplicated(keep='first'))&(~mp['index_y'].duplicated(keep='first'))]
Out[126]:
index_x male age_cat inpatient index_y
0 76649 1.0 0.0 0.0 168799
10 45680 0.0 0.0 0.0 99629
但是,正如您所看到的,我只得到了male==1, age_cat==0 and inpatient==0
的一个示例,而不是预期的两个示例。
我试过其他方法,但效果更差。
我正在合并三个以上的元素, Dataframe 明显要大得多,但问题几乎是一样的。
1条答案
按热度按时间3b6akqbq1#
如果我没理解错的话,您可以在两个 Dataframe 中创建一个临时列(例如
tmp
),然后通过cols
+此列合并 Dataframe :图纸: