Pandas:如何通过特定列值的值获取行计数,并将计数添加为另一列。

时间:2018-06-17 00:44:20

标签: python pandas

假设我的数据看起来像这样,其中所有数据都按照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 。

3 个答案:

答案 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
相关问题