2024-03-28 20:50:10 发布
网友
如何在列COL_1、COL_2、COL_3、COL_X中找到值AAA、BBB的序列(其中X是一些数字,例如200,因此枚举不是一个好的解决方案)?你知道吗
COL_1
COL_2
COL_3
COL_X
AAA
BBB
X
例如,如果有一个数据帧df,那么第1行和第4行应该是输出:
df
df= ID COL_1 COL_2 COL_3 COL_4 1 AAA BBB CCC DDD 2 DDD AAA CCC BBB 3 BBB AAA DDD CCC 4 CCC AAA BBB DDD
您可以浏览所有按1移位并成对压缩的列:
def func(x): return any(x1 == 'AAA' and x2 == 'BBB' for x1, x2 in zip(x.slice_shift(1), x.slice_shift(-1))) print(df[df.apply(func, axis=1)])
对于此数据帧:
COL_1 COL_2 COL_3 COL_4 COL_5 ID 1 AAA BBB CCC DDD 10 2 DDD AAA CCC BBB 20 3 BBB AAA DDD CCC 30 4 CCC AAA BBB DDD 40
输出如下所示:
COL_1 COL_2 COL_3 COL_4 COL_5 ID 1 AAA BBB CCC DDD 10 4 CCC AAA BBB DDD 40
x.slice_shift(1)等价于x[1:],但不复制数据。你知道吗
x.slice_shift(1)
x[1:]
您可以将行的相关列作为字符串连接起来,然后搜索AAA,BBB模式。你知道吗
AAA,BBB
In [152]: df.filter(regex='COL_').apply(lambda x: 'AAA,BBB' in ','.join(x), axis=1) Out[152]: 0 True 1 False 2 False 3 True dtype: bool
如果需要数值,请使用map将它们转换为字符串
map
In [166]: df.apply(lambda x: 'AAA,BBB' in ','.join(map(str, x)), axis=1) Out[166]: 0 True 1 False 2 False 3 True dtype: bool In [175]: df[df.apply(lambda x: 'AAA,BBB' in ','.join(map(str, x)), axis=1)] Out[175]: ID COL_1 COL_2 COL_3 COL_4 0 1 AAA BBB CCC DDD 3 4 CCC AAA BBB DD
您可以浏览所有按1移位并成对压缩的列:
对于此数据帧:
输出如下所示:
x.slice_shift(1)
等价于x[1:]
,但不复制数据。你知道吗您可以将行的相关列作为字符串连接起来,然后搜索
AAA,BBB
模式。你知道吗如果需要数值,请使用
map
将它们转换为字符串相关问题 更多 >
编程相关推荐