[英]How, in python, can I count unique values in a column for gradually increasing numbers of rows within groups
我正在使用 python 处理 Pandas 数据框,并尝试计算组内列的唯一值。 我的问题是,我需要该计数来表示组内稳定增加的行数,而且我也不希望计算 NaN。
简化后,数据看起来像这样
ID occup
1 NaN
1 A
1 NaN
1 Nan
1 B
2 K
2 NaN
2 L
2 L
2 M
新列 'occupcount' 应该在由 'ID' 定义的组内计算 'occup' 中唯一值的数量,但是,在每个组的第一行中,我希望计数只考虑相应组中的第一行. 在第二行,我想计算前两行。 在第五行中,我想要每个组内所有五行的唯一值计数。 它应该是这样的:
ID occup occupcount
1 NaN 0
1 A 1
1 NaN 1
1 B 2
1 A 2
2 K 1
2 NaN 1
2 L 2
2 K 2
2 M 3
我试图用类似的东西来解决这个任务
df['occupcount'] = (df.groupby(["ID"])['occup'].transform('nunique'))
但它只提供每个组内所有行的唯一值总数,没有逐渐增加。 提前致谢!
想法是首先将两列的重复值链接起来,并且不缺少掩码值,然后使用GroupBy.cumsum
:
df['occupcount'] = ((~df.duplicated(['ID','occup']) & df['occup'].notna())
.groupby(df['ID'])
.cumsum())
print (df)
ID occup occupcount
0 1 NaN 0
1 1 A 1
2 1 NaN 1
3 1 B 2
4 1 A 2
5 2 K 1
6 2 NaN 1
7 2 L 2
8 2 L 2
9 2 M 3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.