【问题标题】:Finding the largest (N) proportion of percentage in pandas dataframe在熊猫数据框中找到最大(N)百分比的百分比
【发布时间】:2021-08-31 22:44:40
【问题描述】:

假设我有以下df:

df = pd.DataFrame({'name':['Sara',  'John', 'Christine','Paul',  'Jo', 'Zack','Chris', 'Mathew', 'Suzan'],

                   'visits': [0, 0, 1,2, 3, 9,6, 10, 3]})

df

看起来像:

    name      visits
0   Sara         0
1   John         0
2   Christine    1
3   Paul         2
4   Jo           3
5   Zack         9
6   Chris        6
7   Mathew      10
8   Suzan       3

我做了几行代码来获取每个名称的访问百分比并将它们降序排序:

df['percent'] = (df['visits'] / np.sum(df['visits']))
df.sort_values(by='percent', ascending=False).reset_index(drop=True)

现在我得到了所有名称的访问次数占总访问次数的百分比:

    name    visits  percent
0   Mathew  10  0.294118
1   Zack    9   0.264706
2   Chris   6   0.176471
3   Jo      3   0.088235
4   Suzan   3   0.088235
5   Paul    2   0.058824
6   Christine   1   0.029412
7   Sara    0   0.000000
8   John    0   0.000000

我需要得到的是比例最高的名字中的最大比例。例如,前 3 行占总访问次数的约 73%,与前 3 行的总和相比,其他行可以忽略不计。

我知道我可以使用 nlargest 选择前 3 个:

df.nlargest(3, 'percent')

但数据的可变性很大,最大的比例可能是前 2 或 3 行甚至更多。

编辑:

如何自动找到总行数中 % 的最大 (N) 比例?

【问题讨论】:

    标签: python-3.x pandas dataframe numpy


    【解决方案1】:

    您必须以某种方式定义异常值。一种方法是使用scipy.stats.zscore,例如this answer

    import pandas as pd
    import numpy as np
    from scipy import stats
    
    df = pd.DataFrame({'name':['Sara',  'John', 'Christine','Paul',  'Jo', 'Zack','Chris', 'Mathew', 'Suzan'],
    
                       'visits': [0, 0, 1,2, 3, 9,6, 10, 3]})
    
    df['percent'] = (df['visits'] / np.sum(df['visits']))
    df.loc[df['percent'][stats.zscore(df['percent']) > 0.6].index]
    

    打印出来的

         name  visits   percent
    5    Zack       9  0.264706
    6   Chris       6  0.176471
    7  Mathew      10  0.294118
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 2022-01-16
      • 2021-09-02
      • 2022-11-17
      • 2021-08-17
      • 2023-01-26
      相关资源
      最近更新 更多