首页 > 解决方案 > 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 中的值为零的进程总数。

标签: pythonpandasdataframedata-sciencedata-wrangling

解决方案


如果只包含值,您可以测试所有组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

推荐阅读