假设我的数据看起来像这样,其中所有数据都按照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 。
答案 0 :(得分:2)
首先计算跨度长度:
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
答案 1 :(得分:2)
使用groupby.count
+ pd.Series.duplicated
:
df['count_b'] = df.groupby('b').transform('count')
df.loc[df['b'].duplicated(), 'count_b'] = -1
print(df)
a b count_b
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
如果您愿意,可以将这两个步骤与numpy.where
结合使用:
import numpy as np
df['count_b'] = np.where(df['b'].duplicated(), -1,
df.groupby('b')['b'].transform(len))
答案 2 :(得分:1)
将cy.get('select.myselect option').eq(4).invoke('val').then((val)=>{
cy.get('select.myselect').select(val)
})
// .eq(n) yields the nth element
与value_count
fillna