首页 > 解决方案 > 如果值不是基于三列组合的第一次出现,如何创建空值

问题描述

我有一个包含三列的数据框,希望仅在最后一列中保留唯一值,即基于三列组合的“CU”。

import pandas as pd
data = [['Alex','AL',10],['Bob','AB',15],['Clarke','CC',9],['Alex','Ac',11],['Bob','Ay',10],['Clarke','cv',13],['Alex','Ac',11],['Bob','Ay',13],['Clarke','cv',13]]
df = pd.DataFrame(data,columns=['Name','Cat','Cu'],dtype=float)

df
Out[460]: 
     Name Cat    Cu
0    Alex  AL  10.0
1     Bob  AB  15.0
2  Clarke  CC   9.0
3    Alex  Ac  11.0
4     Bob  Ay  10.0
5  Clarke  cv  13.0
6    Alex  Ac  11.0
7     Bob  Ay  13.0
8  Clarke  cv  13.0

对于上述数据框,如果组合不是第一次出现,则需要将 CU 列值转换为零。基本上试图同时基于三列识别唯一值需要维护所有行。

INPUT:

    df
    Out[460]: 
         Name Cat    Cu
    0    Alex  AL  10.0
    1     Bob  AB  15.0
    2  Clarke  CC   9.0
    3    Alex  Ac  11.0
    4     Bob  Ay  10.0
    5  Clarke  cv  13.0
    6    Alex  Ac  11.0
    7     Bob  Ay  13.0
    8  Clarke  cv  13.0

OUTPUT:

         Name Cat    Cu
    0    Alex  AL  10.0
    1     Bob  AB  15.0
    2  Clarke  CC   9.0
    3    Alex  Ac  11.0
    4     Bob  Ay  10.0
    5  Clarke  cv  13.0
    6    Alex  Ac  0
    7     Bob  Ay  13.0
    8  Clarke  cv  0

标签: pythonpython-3.x

解决方案


利用GroupBy.cumcount

df.loc[df.groupby(['Name', 'Cat', 'Cu']).cumcount().gt(0), 'Cu'] = 0

     Name Cat    Cu
0    Alex  AL  10.0
1     Bob  AB  15.0
2  Clarke  CC   9.0
3    Alex  Ac  11.0
4     Bob  Ay  10.0
5  Clarke  cv  13.0
6    Alex  Ac   0.0
7     Bob  Ay  13.0
8  Clarke  cv   0.0

推荐阅读