python - 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_instances 组成。对我来说,只有由 3 或 2 组成的那些是重要的(如 a、b、c、e),并且每个实例的 C 列中的所有值都是 0。
目标:我需要知道有多少进程的值为 0(C 列)。但请记住,一个进程可能包含 3 或 2 个 process_instances。在这种情况下,只有过程 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