Pandas Jupyter Notebook-一列相对于另一列的value_counts



我是Pandas的初学者,真的不知道如何解决这个问题:

我有一个df,看起来像这样:

A             B        C
process a   xawdw      0
process a   wdqwdqf    0
process a   wqwrq      0
process b   rwqrqw     2
process b   rwrwr      1
process c   qrqrw      1
process c   qrrwr      2
process c   rt544z     3
process d   zrz4z4z    0
process e   zrzrz45z4  0
process e   7zkzuk     0

A列和B列对我来说很重要。有些进程由3个、2个或1个process_instance组成。对我来说,只有由3或2组成的值才是重要的(如a、b、c、e(,其中每个实例的c列中的所有值都是0。

目标:我需要知道有多少进程的值为0(C列(。但请记住,一个进程可能由3个或2个process_instance组成。在这种情况下,只有过程a和e对我来说很重要,目标是给我这样的东西:

Instances.   Total number of only 0-processes
3 instances: 1 (#process a)
2 instances: 1 (#process e)

我尝试了value_counts,但它只会返回C列中0的总数。但我需要在进程的所有实例中,C列中的值为零的进程总数。

如果只包含0值,则可以测试所有组,如果重复A,则与测试链接,并传递到Series.value_counts:

m1 = ~df.A.isin(df.loc[df['C'].ne(0), 'A'])
#alternative
#m1 = df.C.eq(0).groupby(df.A).transform('all')
m2 = df.A.duplicated(keep=False)
s = df.loc[m1 & m2, 'A'].value_counts()
print (s)
process a    3
process e    2
Name: A, dtype: int64

最后一次如果需要再次计数值:

print (s.value_counts().rename_axis('Instances').reset_index(name='Total number of only 0-processes'))
Instances  Total number of only 0-processes
0          2                                 1
1          3                                 1

最新更新