基于列范围的范围值条件筛选数据帧行

2024-10-03 21:28:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想显示行,其中A-F列中的值满足一个条件,即只有单列值在(0,5>;之间,其余值大于5。将其视为我想了解的情况,其中只有一个元素离测量中心很近(例如,0-5m距离),其余点(列值)都在附近“进一步”。我添加了字符串列作为障碍

我在下面的代码中进行了尝试,但没有成功。此外,还有一个条件,即其余列的值应大于5

df[(df.columns[-6:]>0) & (df.columns[-6:]<=5)]

最小可复制示例:

import numpy as np
import pandas as pd
import string
rowsNumber = 15
digitColumnNumber = 6
letterColumnNumber = 3
df_numbers = pd.DataFrame(np.random.randint(0,25,size=(rowsNumber, digitColumnNumber)), columns=list('ABCDEF'))
df_letters = pd.DataFrame(np.arange(rowsNumber*letterColumnNumber).reshape(rowsNumber,letterColumnNumber)).applymap(lambda x: np.random.choice(list(string.ascii_letters)))
df = pd.concat([df_letters, df_numbers], axis=1)

enter image description here


Tags: columnsimportdataframedfstringasnprandom
2条回答

这就是你要找的吗

df2 = df.loc[:,'A':'F'].copy()
df.loc[df2.clip(0,5).eq(df2).sum(axis=1).eq(1)]

您可以简单地对所需的列进行切片,并对其值小于或等于5的列进行计数(我假设这些值大于或等于零,但如果不是这样,则很容易添加第二个检查):

df[df.loc[:,'A':'F'].le(5).sum(1).eq(1)]

相关问题 更多 >