【问题标题】:Number of records with a certain frequency in a grouped data-frame分组数据框中具有特定频率的记录数
【发布时间】:2018-04-13 23:45:37
【问题描述】:

我正在尝试在我的 pandas 列 'Subject' 中计算一条记录出现频率大于 3 的次数 - 按日期分组。

目前此代码有效,但它适用于整个数据框。

main_subj = df['Subject'].value_counts(
[df['Subject'].value_counts()>3] count_main_subj = main_subj.shape[0]

我想按'date' 对数据进行分组 - 以查看每天有多少条记录的频率高于 3。

我的数据框如下所示:

Subject  Verb     Object     ID         Date
trump     got     jobs        820108    20170803
voters    begin   to          182912    20170803
steve     miss    colleague   980828    20170804

例如,如果一天有 10 条记录: 5与主题王牌 3 与主题克林顿 2 与主题 obama

结果将是 2 - 出现超过 3 次的主题数。

谢谢!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你可以使用:

    (df.groupby(['Date', 'Subject']).size() >= 3).sum()

    例子:

    In [227]: df
    Out[227]:
      Subject   Verb     Object      ID      Date
    0   trump    got       jobs  820108  20170803
    1  voters  begin         to  182912  20170803
    2   steve   miss  colleague  980828  20170804
    3   trump    got       jobs  820108  20170803
    4   trump    got       jobs  820108  20170803
    
    In [228]: (df.groupby(['Date', 'Subject']).size() >= 3).sum()
    Out[228]: 1
    

    如果你想按日期计数:

    d = (df.groupby(['Date', 'Subject']).size() >= 3).reset_index()
    d[d[0]].groupby('Date').size()
    

    【讨论】:

      【解决方案2】:

      假设您有一个名为日期的列,您可以按日期分组

      df.groupby('date').size()
      

      df[['Subject', 'date']].groupby('date').size()
      

      这将输出您需要的计数

      【讨论】:

      • 感谢您的回复 - 我只想知道超过 3 个结果的主题数量。不幸的是,这只显示了我每天的总体规模。
      【解决方案3】:

      看来你需要

      s=df.groupby(['Date','Object']).size()
      len(s[s>3])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-23
        • 2019-02-08
        • 2017-04-23
        • 2013-03-25
        • 1970-01-01
        • 2017-02-28
        • 2017-07-15
        • 1970-01-01
        相关资源
        最近更新 更多