【问题标题】:Pandas Jupyter Notebook - value_counts of a column in relation to anotherPandas Jupyter Notebook - 一列相对于另一列的 value_counts
【发布时间】:2021-09-10 15:15:10
【问题描述】:

我是 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 中的值为零的进程总数。

【问题讨论】:

    标签: python pandas dataframe data-science data-wrangling


    【解决方案1】:

    如果只包含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
    

    【讨论】:

    • 非常感谢。不幸的是,它对我不起作用。 :(
    • @Dilan 什么意思不工作?您能否更具体地说明我的解决方案的输出与预期输出之间有什么区别?
    猜你喜欢
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多