Select一个dataframe使用布尔选择,然后提取某列对应的值
Select a dataframe using boolean selection, and then extract the value corresponding to a certain column
示例数据框:
import pandas as pd
df = pd.DataFrame({'a': [-3, -2, 0], 'b': [-2, 2, 5], 'c': [-1, 0, 7], 'd': [1, 4, 8]})
我正在尝试做一些我希望相当简单的事情,并且在支持数据框 class 的其他语言中确实是直接的,例如 R。我只想提取一个值来自 df
,唯一需要注意的是我 select 使用布尔表达式(例如,`"a"==0)的行,而不是使用标签。像往常一样,该列由标签 select 编辑。例如,这可行,但似乎不必要地浪费:
df["c"][df["a"]==0][1]
这条指令不是直接从数据帧中提取值,而是 1) 提取一个 Pandas 系列,2) select 系列中的一行,以及 3) selects行返回的数组的第二个元素 selection! (第一个元素是索引)。它不仅看起来不必要地复杂,而且我担心对于非常大的数据帧来说它也可能很慢。
我尝试了使用 .at
或 .iat
的其他解决方案,但似乎没有任何效果。没有 simpler/smarter 的方法吗?
你不能一次做到这一点:
In [11]: df.loc[df["a"]==0, "c"]
Out[11]:
2 7
Name: c, dtype: int64
In [12]: df.loc[df["a"]==0, "c"].iat[0]
Out[12]: 7
使用 nonzero
和 iat
df.iat[(df.a==0).nonzero()[0][0],2]
Out[114]: 7
示例数据框:
import pandas as pd
df = pd.DataFrame({'a': [-3, -2, 0], 'b': [-2, 2, 5], 'c': [-1, 0, 7], 'd': [1, 4, 8]})
我正在尝试做一些我希望相当简单的事情,并且在支持数据框 class 的其他语言中确实是直接的,例如 R。我只想提取一个值来自 df
,唯一需要注意的是我 select 使用布尔表达式(例如,`"a"==0)的行,而不是使用标签。像往常一样,该列由标签 select 编辑。例如,这可行,但似乎不必要地浪费:
df["c"][df["a"]==0][1]
这条指令不是直接从数据帧中提取值,而是 1) 提取一个 Pandas 系列,2) select 系列中的一行,以及 3) selects行返回的数组的第二个元素 selection! (第一个元素是索引)。它不仅看起来不必要地复杂,而且我担心对于非常大的数据帧来说它也可能很慢。
我尝试了使用 .at
或 .iat
的其他解决方案,但似乎没有任何效果。没有 simpler/smarter 的方法吗?
你不能一次做到这一点:
In [11]: df.loc[df["a"]==0, "c"]
Out[11]:
2 7
Name: c, dtype: int64
In [12]: df.loc[df["a"]==0, "c"].iat[0]
Out[12]: 7
使用 nonzero
和 iat
df.iat[(df.a==0).nonzero()[0][0],2]
Out[114]: 7