我有一个随机采样的输出数据帧,看起来像这样。
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行,增加了一倍。如何解决该问题?
答案 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