假设我的数据看起来像这样,其中所有数据都按 b 列中的值排序
a b
1 32
4 32
5 32
9 45
8 45
3 76
5 76
7 76
9 76
让第一行包含特定列值的最有效方法是特定列值出现的总次数。对于具有相同列值的其余行,我希望它们是不同的值(字符串、-1、nan 等,但不是正整数)。在下面的示例中,我使用“-1”作为不同的值
a b count b
1 32 3
4 32 -1
5 32 -1
9 45 2
8 45 -1
3 76 4
5 76 -1
7 76 -1
9 76 -1
因此在上表中,第 b 列为 32 的第一行的“Count b”值为 3,然后列为 32 的其余行的“Count b”值为 -1 .
请您参考如下方法:
首先计算跨度长度:
df = df.merge(df.groupby('b').size().reset_index())
# a b 0
#0 1 32 3
#1 4 32 3
#2 5 32 3
#3 9 45 2
#4 8 45 2
#5 3 76 4
#6 5 76 4
#7 7 76 4
#8 9 76 4
将每个跨度中的重复长度替换为-1:
df.loc[df.duplicated(subset=['b',0]), 0] = -1
# a b 0
#0 1 32 3
#1 4 32 -1
#2 5 32 -1
#3 9 45 2
#4 8 45 -1
#5 3 76 4
#6 5 76 -1
#7 7 76 -1
#8 9 76 -1
