【问题标题】:Group by sum with filter over grouped by total按总和分组,过滤器按总分组
【发布时间】:2020-09-30 04:59:03
【问题描述】:

如果我的 df 如下:

State | x_date    |  y_date    | z_date   | amount | date_status
NY   2019-10-24      NaN         NaN       $400      2019-05-01
NJ   2019-07-24   2019-10-24 2019-10-20     $0       2019-05-01
CA      NaN       2019-01-24     NaN       $320      2019-05-01
WA      NaN          NaN         NaN       $10       2019-05-01
WA    2018-07-10     NaN         NaN       $100      2019-05-01
WA    2018-09-10     NaN     2019-10-10    $30       2019-05-01

如何按 State 列进行分组并获得该州分组中的数量列的总和/所有行的数量总和?

仅当 x_date、y_date 或 z_date 中的任何日期晚于或date_status 列中的日期之后

预期输出:

State | pct 
NY      1
NJ      0
CA      0
WA     .21

WA 是 (30/140)

谢谢!

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    非常简单:

    filtered_df = df[
        (df['x_date'] >= df['date_status']) 
        | (df['y_date'] >= df['date_status'])
        | (df['z_date'] >= df['date_status'])
    ]
    result = (
        filtered_df.groupby('State').amount.sum()
        / df.groupby('State').amount.sum()
    ).fillna(0)
    

    结果:

    State
    CA    0.000000
    NJ    0.000000
    NY    1.000000
    WA    0.214286
    Name: amount, dtype: float64
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-10
      • 2021-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      相关资源
      最近更新 更多