我有一个数据框,要按大于20的值进行过滤
ID value
A 10
B 21
C 22
我使用了df['ID'] > 20
并收到了结果
False
True
True
但是,我希望它返回B, C
,而不是布尔值
答案 0 :(得分:3)
df.loc
是你的朋友:
df.loc[df['value'] > 20, 'ID']
答案 1 :(得分:1)
或使用eval
个熊猫:
df.loc[df.eval('value > 20'),'ID']
或者(不建议使用)where
大熊猫:
df.where(df['value']>20,df['ID'],axis=1).dropna()['ID']
答案 2 :(得分:0)
仅选择值> 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
的答案与上述步骤相同,只是更好,更简洁。我会保留这一切,以防任何人解释。
答案 3 :(得分:0)
许多解决方法。
您可以使用向量化操作来解决此问题。现在,您的代码仅评估语句是对还是错。通过将此语句包装在方括号内,可以对Pandas数据框进行过滤,所有语句的评估结果都为True。
因此,如果您的数据集看起来像
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']
答案 4 :(得分:0)