我有一个如下所示的DataFrame。两个列都包含Member_ID,表示哪些Member_ID与其他Member_ID相连
col1 col2 1 3 1 4 1 5 2 3 2 4 3 1 3 2 3 5 4 1 4 2 5 1 5 3
我已经计算了每个Member_ID与多少个Member_ID相连。例如,Member_ID 1与3个Member_ID相连。如果一个Member_ID包含3个或更多的连接,我们需要在Member_ID前面加上“a”,否则我们需要加上“b”,所以对于Member_ID 1,我们需要标记为“a1”。同样,我已经为每个Member_ID计算了标签,标签数组如下。
member_ID No_of_con Label 1 3 a1 2 2 b2 3 3 a3 4 2 b4 5 2 b5
现在我需要参考标签数组来替换第一个DataFrame中的值。DataFrame很大,使用for循环效率不高,那么如何用Pandas更简单地实现这一点?我期望的结果如下
col1 col2 a1 a3 a1 b4 a1 b5 b2 a3 b2 b4 a3 a1 a3 b2 a3 b5 b4 a1 b4 b2 b5 a1 b5 a3
回答:
我们可以使用stack
、map
和unstack
来实现:
In [9]: d1.stack().map(d2.set_index('member_ID')['Label']).unstack()Out[9]: col1 col20 a1 a31 a1 b42 a1 b53 b2 a34 b2 b45 a3 a16 a3 b27 a3 b58 b4 a19 b4 b210 b5 a111 b5 a3