过滤 Pandas 系列数组
Filtering Pandas Series of arrays
我有一个 Pandas 系列,里面有数组,看起来像这样:
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
我正在尝试过滤掉那些在数组中具有 b'\x3f3f'
的行(block_number 值)并且它必须是数组中的唯一值。
我通过 df 的 groupby 获得了这个系列,如下所示:
set = frame[['block_number', 'block_header']]
.groupby(['block_number'])['block_header'].agg('unique')
我正在努力在这个系列中使用 .where() w/lambda,我想这对于第一次 Pandas 使用来说还不够简单。
感谢任何帮助,谢谢!
我认为你需要 boolean indexing
with condtions - check by in
value in array
and str.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]
我有一个 Pandas 系列,里面有数组,看起来像这样:
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
我正在尝试过滤掉那些在数组中具有 b'\x3f3f'
的行(block_number 值)并且它必须是数组中的唯一值。
我通过 df 的 groupby 获得了这个系列,如下所示:
set = frame[['block_number', 'block_header']]
.groupby(['block_number'])['block_header'].agg('unique')
我正在努力在这个系列中使用 .where() w/lambda,我想这对于第一次 Pandas 使用来说还不够简单。
感谢任何帮助,谢谢!
我认为你需要 boolean indexing
with condtions - check by in
value in array
and str.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]