如果组大小超过一个

时间:2017-07-12 15:02:17

标签: python pandas dataframe

我有以下数据框

    channel_id  user_agent_id  user_id_x  percents_normalized  user_id_y
0           1              1          1                  NaN        NaN    
1           1              2          1             0.734928        1.0
2           1              3          1             0.369057        1.0
3           2              1          2                  NaN        NaN
4           3              1          3                  NaN        NaN
5           3              5          3                  NaN        NaN
6           3             10          3                  NaN        NaN
7           4              2          4             0.734928        1.0
8           5              2          5             0.734928        1.0

我希望能够按channel_id进行分组,并且对于每个组,移除大小大于1的每个组的NaN记录,并在percents_normalized列上删除至少一个用于channel_id' s的非NaN值我想从channel_id 1中删除Nan。频道3的大小> 1但是所有行都有NaN,而通道ID 2的大小为1。

1 个答案:

答案 0 :(得分:1)

您可以使用groupby.transform构建布尔序列以进行子集化;条件((x.size==1) or x.isnull().all()) | x.notnull()由组级别条件(x.size==1) or x.isnull().all()组成,如果true只有一条记录或所有记录都为空,则为id,并且记录级别条件为x.notnull() {1}},即如果不满足组级别条件,则仅保留非空值:

(df[df.groupby('channel_id').percents_normalized
      .transform(lambda x: ((x.size==1) or x.isnull().all()) | x.notnull()).astype(bool)])

enter image description here