【问题标题】:Groupby Apply Quantile ReplacementGroupby 应用分位数替换
【发布时间】:2020-09-09 15:39:17
【问题描述】:

我正在尝试使用 python 的 pandas groupby、apply、where 和 quantile 将低于 50% 分位数的值替换为 NaN by 'date' 组,但它似乎正在返回单元格中的列表。如何在“值”列之后的新列中获得这些结果。

这是我拥有的代码(欢迎任何其他方法)。它返回单元格中的列表:

In[0]: df.groupby('date')['value'].apply(lambda x: np.where(x<x.quantile(0.5),np.nan,x))  
Out[0]:                            
date                            value     
2019-12-23  [nan, nan, 3.0, 4.0, 5.0]
2014-08-13  [nan, nan, 3.0, 4.0, 5.0]

如果我创建一个新列,它会在新列中返回 NaN:

In[1]: df['new_value']= df.groupby('date')['value'].apply(lambda x: np.where(x<x.quantile(0.5),np.nan,x))
Out[1]: 
        date  value    new_value
0 2019-12-23      1.0       NaN
1 2019-12-23      2.0       NaN
2 2019-12-23      3.0       NaN
3 2019-12-23      4.0       NaN
4 2019-12-23      5.0       NaN
5 2014-08-13      1.0       NaN
6 2014-08-13      2.0       NaN
7 2014-08-13      3.0       NaN
8 2014-08-13      4.0       NaN
9 2014-08-13      5.0       NaN

我想解决这个问题:

        date     value    new_value
0 2019-12-23      1.0        NaN
1 2019-12-23      2.0        NaN
2 2019-12-23      3.0        3.0
3 2019-12-23      4.0        4.0
4 2019-12-23      5.0        5.0
5 2014-08-13      1.0        NaN
6 2014-08-13      2.0        NaN
7 2014-08-13      3.0        3.0
8 2014-08-13      4.0        4.0
9 2014-08-13      5.0        5.0

【问题讨论】:

    标签: python pandas pandas-groupby quantile pandas-apply


    【解决方案1】:

    你可以使用transform代替apply

    df["new_value"] = df.groupby("date")["value"].transform(
        lambda x: np.where(x < x.quantile(0.5), np.nan, x)
    )
    
    
        date    value   new_value
    0   2019-12-23  1.0     NaN
    1   2019-12-23  2.0     NaN
    2   2019-12-23  3.0     3.0
    3   2019-12-23  4.0     4.0
    4   2019-12-23  5.0     5.0
    5   2014-08-13  1.0     NaN
    6   2014-08-13  2.0     NaN
    7   2014-08-13  3.0     3.0
    8   2014-08-13  4.0     4.0
    9   2014-08-13  5.0     5.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 2018-04-01
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多