【问题标题】:how to find frequency distribution in a data frame with respect to a particular column using pandas in python如何在python中使用pandas查找数据框中相对于特定列的频率分布
【发布时间】:2017-09-26 06:11:18
【问题描述】:

我有一个这样的数据框,

df,
A   B   C   D   Final
a   b   c   d   Valid
a       c       Valid
a       c   d   Valid
a               Valid

我想计算最后一列中每列的百分比。

我想要的输出是,

output = a=4,b=1,c=3,d=2

请帮忙

【问题讨论】:

    标签: python list pandas dataframe frequency-distribution


    【解决方案1】:

    如果缺少空值,请使用 dropcount

    print (df)
       A    B    C    D  Final
    0  a    b    c    d  Valid
    1  a  NaN    c  NaN  Valid
    2  a  NaN    c    d  Valid
    3  a  NaN  NaN  NaN  Valid
    
    df = df.drop('Final', axis=1).count()
    print (df)
    A    4
    B    1
    C    3
    D    2
    dtype: int64
    

    如果值为空字符串,首先通过eqsum 比较Trues:

    print (df)
       A  B  C  D  Final
    0  a  b  c  d  Valid
    1  a     c     Valid
    2  a     c  d  Valid
    3  a           Valid
    
    df = df.drop('Final', axis=1).ne('').sum()
    print (df)
    A    4
    B    1
    C    3
    D    2
    dtype: int64
    

    print (df.to_dict())
    {'B': 1, 'A': 4, 'C': 3, 'D': 2}
    
    d = df.div(len(df.index)).mul(100).to_dict()
    print (d)
    {'B': 25.0, 'A': 100.0, 'C': 75.0, 'D': 50.0}
    

    【讨论】:

    • 是否可以在 A:4,B:1,C:3,D:2 等字典中获取列名和值
    • 好的,最后添加to_dict()
    • 实际上我正在尝试获取每列相对于 Final 列的百分比,我想要 A:100,B:25,C:75,D:50
    • 那么想要的输出是什么?
    • d = df.drop('Final', 1).ne('').sum().div(len(df.index)).to_dict() print (d) {'B': 0.25, 'A': 1.0, 'C': 0.75, 'D': 0.5} 呢?
    猜你喜欢
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 2019-02-17
    • 2016-08-03
    • 1970-01-01
    • 2021-02-22
    • 2018-01-16
    相关资源
    最近更新 更多