【问题标题】:Filtering of values within a column based on the dates in another column根据另一列中的日期过滤列中的值
【发布时间】:2021-06-16 13:22:59
【问题描述】:

大家好,我有一个带有日期和值列的 pandas 数据框。 我要做的是根据下表的不同日期将值保持在 25% 和 75% 分位数内。有没有办法做到这一点?

Date Values
2020-1-23 455.0
2020-1-25 428.0
2020-1-25 379.0
2020-1-25 386.0
2020-1-26 385.0
2020-1-26 476.0
2020-1-26 427.0
2020-1-26 399.0
2020-1-26 374.0
2020-1-26 419.0

【问题讨论】:

    标签: python-3.x pandas quantile percentile


    【解决方案1】:

    GroupBy.transform 与 lambda 函数一起使用并传递给Series.between 以在boolean indexing 中进行过滤:

    g = df.groupby('Date')['Values']
    s1 = g.transform(lambda x: x.quantile(0.25))
    s2 = g.transform(lambda x: x.quantile(0.75))
    
    df = df[df['Values'].between(s1, s2)]
    print (df)
            Date  Values
    0  2020-1-23   455.0
    3  2020-1-25   386.0
    7  2020-1-26   399.0
    9  2020-1-26   419.0
    

    或将DataFrameGroupBy.quantileDataFrame.join 一起使用:

    df1 = df.join(df.groupby('Date')['Values'].quantile([0.25,0.75]).unstack(), on='Date')
    
    df = df[df['Values'].between(df1[0.25], df1[0.75])]
    print (df)
            Date  Values
    0  2020-1-23   455.0
    3  2020-1-25   386.0
    7  2020-1-26   399.0
    9  2020-1-26   419.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多