合并后重复的行

时间:2019-11-19 21:49:57

标签: pandas

我有一个随机采样的输出数据帧,看起来像这样。

df1  
     ID   lifetime
  0  10     11
  1  12     13
  2  11     12
  3  10     11 

我想将df1中的生存期值映射到第二个数据场df2:

 df2
     ID  Class   El  Price
  0  10   pc1     0    20 
  1  10   pc1     1    21 
  2  10   pc1     2    20
  3  10   pc2     0    20
  4  10   pc2     1    20 
  5  10   pc2     2    21 
  6  10   pc2     3    20
  7  11   pc1     0    20
  8  11   pc1     1    20 
  9  11   pc1     2    21 
 10  11   pc2     0    20
 11  11   pc2     1    20
 12  11   pc2     2    20 
 13  11   pc2     3    21 
 14  10   pc1     0    20
 15  10   pc1     1    21
 16  10   pc1     2    23
 17  10   pc1     0    22
 18  10   pc2     1    24 
 19  10   pc2     2    20 
 20  10   pc2     3    20 
 .....

我尝试过:

  results=df1.merge(df2, on='ID') 

我也尝试过:

  results=df1.merge(df2, left_on='ID', right_on='ID')

我最终得到了额外的行,并注意到样品ID 10的行从14行增加到28行,增加了一倍。如何解决该问题?

1 个答案:

答案 0 :(得分:2)

使用DataFrame.drop_duplicates + Series.map 只要不同的值未分配给同一ID,这将起作用

df2['lifetime']=df2['ID'].map(df1.drop_duplicates('ID').set_index('ID')['lifetime'])
print(df2)

    ID Class  El  Price  lifetime
0   10   pc1   0     20        11
1   10   pc1   1     21        11
2   10   pc1   2     20        11
3   10   pc2   0     20        11
4   10   pc2   1     20        11
5   10   pc2   2     21        11
6   10   pc2   3     20        11
7   11   pc1   0     20        12
8   11   pc1   1     20        12
9   11   pc1   2     21        12
10  11   pc2   0     20        12
11  11   pc2   1     20        12
12  11   pc2   2     20        12
13  11   pc2   3     21        12
14  10   pc1   0     20        11
15  10   pc1   1     21        11
16  10   pc1   2     23        11
17  10   pc1   0     22        11
18  10   pc2   1     24        11
19  10   pc2   2     20        11
20  10   pc2   3     20        11