Skip to main content
 首页 » 编程设计

python Pandas : How to replace values in a Dataframe based on another array in conditional base

2025年05月04日11zhenyulu

我有一个 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

请您参考如下方法:

我们可以堆叠、映射和取消堆叠:

In [9]: d1.stack().map(d2.set_index('member_ID')['Label']).unstack() 
Out[9]: 
   col1 col2 
0    a1   a3 
1    a1   b4 
2    a1   b5 
3    b2   a3 
4    b2   b4 
5    a3   a1 
6    a3   b2 
7    a3   b5 
8    b4   a1 
9    b4   b2 
10   b5   a1 
11   b5   a3