3

我有一个数据框,我想按超过 20 的值进行过滤

ID   value
A    10
B    21
C    22

我使用df['ID'] > 20并收到了结果

False
True
True

但是,我希望它返回B, C,而不是布尔值

4

5 回答 5

3

df.loc是你的朋友:

df.loc[df['value'] > 20, 'ID']
于 2018-11-05T03:53:10.950 回答
1

或使用eval熊猫:

df.loc[df.eval('value > 20'),'ID']

或者(不是很推荐),使用where熊猫:

df.where(df['value']>20,df['ID'],axis=1).dropna()['ID']
于 2018-11-05T03:54:25.157 回答
0

仅选择 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与上面的步骤相同,只是更好,更简洁。我会留下这个,以防任何人解释。

于 2018-11-05T03:50:13.867 回答
0

这里有很多方法可以解决。

您可以使用矢量化操作来解决此问题。现在,您的代码仅评估语句是真还是假。通过将此语句包含在方括号内,您可以过滤所有语句评估为 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']

于 2018-11-05T04:05:13.963 回答
0

您可以过滤价值

df[df['value'] > 20]

在此处输入图像描述

您可以通过在末尾添加所需的列来过滤所需的列

df[df['value'] > 20].ID

在此处输入图像描述

于 2018-11-05T04:40:09.653 回答