我是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