过滤Pandas系列阵列

时间:2017-10-08 06:38:19

标签: python pandas pandas-groupby

我有一个带有阵列的Pandas系列,看起来像这样:

users_id | checkin_date | checkout_date | delayed_checkin remarks | early_checkout_remarks | Leave Remarks
1        | 2017-01-28   | 2017-01-28    | traffic jam             | NULL | NULL
2        | 2017-01-28   | 2017-01-28    | household               | NULL | NULL
2        | 2017-01-29   | 2017-01-30    | NULL                    | NULL |Personal : Trekking
3        | 2017-01-28   | 2017-01-28    | NULL                    | NULL | NULL
4        | 2017-01-28   | 2017-01-28    | traffic jam             | sick | NULL
1        | 2017-01-29   | 2017-01-29    | traffic jam             | NULL | NULL
3        | 2017-01-29   | 2017-01-29    | NULL                    | bored| NULL
4        | 2017-01-29   | 2017-01-29    | traffic jam             | NULL | NULL
5        | 2017-01-28   | 2017-01-30    | NULL                    | NULL | Sick : Fever (Or something like this)

我正在尝试过滤掉数组中In [80]: set.tail(7) Out[80]: block_number 942 [b'??'] 943 [b'??'] 944 [b'??', b'\xff?'] 945 [b'??'] 65280 [b'\xff\xff'] 65281 [b'\xff\xff'] 65535 [b'\xff\xff', b'\x01\xa0', b'\x81\xa0', b'\x01... Name: block_header, dtype: object 的那些行(block_number值),它必须是数组中唯一的值。

由于来自df的groupby,我得到了这个系列,如下所示:

b'\x3f3f'

我很难在这个系列上使用.where()w / lambda,我想这对于Pandas第一次使用来说并不是一件容易的事。

感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您需要boolean indexing有条件 - 请in arraystr.len查看array的获取长度:

s = frame[['block_number', 'block_header']]
          .groupby(['block_number'])['block_header'].agg('unique')

a = b'\x3f3f'
mask = (s.apply(lambda x: a in x)) & (s.str.len() == 1)
out = s[~mask]