Skip to main content
 首页 » 编程设计

python之在进行 pandas 合并时,用唯一的 "na"标识符填充 "na"值

2025年05月04日12落叶无声

我想合并两个 pandas 数据框。

df1 =  
A   B 
2   11 
2   13 
2   15 
2   19 
2   25 
2   35 
2   41 
2   47 
2   46 
2   51 
3   9 
3   15 
3   17 
3   23 
3   25 
3   29 
5   4 
5   23 
5   28 

与另一个数据框。

   df2 =  
A   B    C 
2   11   abc 
2   13   cdd 
2   35   cdd 
2   41   cdd 
2   47   cdd 
3   9   cdd 
3   15   cdd 
3   17   cdd 
3   23   cdd 

两个数据帧都按“A”排序,然后按“B”排序。我想按 columns['A', 'B'] 合并;因此,对于缺少数据的“C”列,我想用 na 来填充它们,但是用 na_uniqueNumber 来填充 na 的每个缺失 block 。

如何更新此合并方法:

data_frames = [df1, df2] 
df_update = reduce(lambda left,right: pd.merge( 
    left, right, on=['A', 'B'], how='outer'), data_frames).fillna('na') 

注意:在存在其他列的情况下,代码应仅在“C”中使用唯一值更新na。

预期输出:

   df2 =  
A   B    C 
2   11   abc 
2   13   cdd 
2   15   na_01 
2   19   na_01  
2   25   na_01   
2   35   cdd 
2   41   cdd 
2   47   cdd 
2   46   na_02 
2   51   na_02 
3   9   cdd 
3   15   cdd 
3   17   cdd 
3   23   cdd 
3   25   na_03 
3   29   na_03 
5   4   na_04 
5   23   na_04 
5   28   na_04 

谢谢,

请您参考如下方法:

国际联合会

New = df_update[df_update.C == 'na'] 
 
s=New.reset_index().groupby('A').apply(lambda x : x['index'].diff().ne(1)).cumsum() 
 
df_update.loc[df_update.C == 'na','C']+='_'+s.astype(str).str.pad(2,fillchar='0').values 
df_update 
Out[124]:  
    A   B      C 
0   2  11    abc 
1   2  13    cdd 
2   2  15  na_01 
3   2  19  na_01 
4   2  25  na_01 
5   2  35    cdd 
6   2  41    cdd 
7   2  47    cdd 
8   2  46  na_02 
9   2  51  na_02 
10  3   9    cdd 
11  3  15    cdd 
12  3  17    cdd 
13  3  23    cdd 
14  3  25  na_03 
15  3  29  na_03 
16  5   4  na_04 
17  5  23  na_04 
18  5  28  na_04