python pandas 如何为空行设置唯一值?

python pandas how to set unique value for null row?

我有一个这样的数据框:

       sku         new-sku
0  FAT-001     FAT-001
1  FAT-001  FAT-001-01
2  FAT-001  FAT-001-02
3  FAT-002     FAT-002
4  FAT-002  FAT-002-01
5           
6            
7 FAT-003   FAT-003
8            
9           
        

这是我的代码:

groups = df.groupby('sku').cumcount()
df['new'] = df['sku'] + ('-' + groups.astype('string').str.zfill(2)).mask(groups.eq(0), '')

我的预期结果如下所示:

       sku         new-sku
0  FAT-001     FAT-001
1  FAT-001  FAT-001-01
2  FAT-001  FAT-001-02
3  FAT-002     FAT-002
4  FAT-002  FAT-002-01
5           FAT-null-01
6           FAT-null-02
7 FAT-003   FAT-003
8           FAT-null-03
9           FAT-null-04

它会为每个新的空行增加 +1。

构造函数:

{'sku': {0: 'FAT-001', 1: ' ', 2: ' ', 3: 'FAT-002', 4: 'FAT-002', 5: ' ', 6: ' ', 7: 'FAT-003', 8: 'FAT-003', 9: 'FAT-004'}}

的基础上,我们可以在使用 groupby.cumcount 为白色 space 行创建组时添加 mask 并进行相应调整:

groups = df.groupby('sku').cumcount()
groups = groups.mask(df['sku'].eq(' '), groups+1)
df['new-sku'] = df['sku'].replace(' ', 'FAT-null') + ('-' + groups.astype('string').str.zfill(2)).mask(groups.eq(0), '')

输出:

   ID      sku      new-sku
0   1  FAT-001      FAT-001
1   2           FAT-null-01
2   3           FAT-null-02
3   4  FAT-002      FAT-002
4   5  FAT-002   FAT-002-01
5   6           FAT-null-03
6   7           FAT-null-04
7   8  FAT-003      FAT-003
8   9  FAT-003   FAT-003-01
9  10  FAT-004      FAT-004