我有一个数据框,我想按超过 20 的值进行过滤
ID value
A 10
B 21
C 22
我使用df['ID'] > 20并收到了结果
False
True
True
但是,我希望它返回B, C,而不是布尔值
df.loc是你的朋友:
df.loc[df['value'] > 20, 'ID']
或使用eval熊猫:
df.loc[df.eval('value > 20'),'ID']
或者(不是很推荐),使用where熊猫:
df.where(df['value']>20,df['ID'],axis=1).dropna()['ID']
仅选择 value > 20 的行,然后返回 ID 的值
import pandas as pd
df = {"ID": ["A", "B", "C"], "val":[10, 21, 22]}
df = pd.DataFrame(df)
df = df[df["val"] > 20]
df["ID"].values
回报:
array(['B', 'C'], dtype=object)
编辑:这里使用的答案df.loc与上面的步骤相同,只是更好,更简洁。我会留下这个,以防任何人解释。
这里有很多方法可以解决。
您可以使用矢量化操作来解决此问题。现在,您的代码仅评估语句是真还是假。通过将此语句包含在方括号内,您可以过滤所有语句评估为 True 的 Pandas 数据框。
所以如果你的数据集看起来像
df = pd.DataFrame({'ID': {0: 'A', 1: 'B', 2: 'C'}, 'value': {0: 10, 1: 21, 2: 22}})
您可以对其进行过滤:
df[df['value'] > 20]或者如果您只想接收 ID 列中的值,则添加该列的名称df[df['value'] > 20]['ID']