示例数据框:
import pandas as pd
df = pd.DataFrame({'a': [-3, -2, 0], 'b': [-2, 2, 5], 'c': [-1, 0, 7], 'd': [1, 4, 8]})
我正在尝试做一些我希望相当简单的事情,并且确实在其他支持数据框类的语言(例如R)中是即时的。我只想从df
中提取一个值,唯一需要注意的是,我选择了带有布尔表达式(例如,““ a” == 0“)的行,而不是使用标签。照常,该列是通过标签选择的。例如,这可行,但似乎不必要地浪费:
df["c"][df["a"]==0][1]
此指令不是直接从数据框中提取值,而是1)提取熊猫系列,2)选择系列中的一行,3)选择由行选择返回的数组的第二个元素! (第一个元素是索引)。它不仅看起来不必要地复杂,而且我担心它对于非常大的数据帧也可能很慢。
我尝试使用.at
或.iat
的其他解决方案,但似乎无济于事。难道没有更简单/更智能的方法吗?
答案 0 :(得分:2)
您不能一口气做到这一点:
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
答案 1 :(得分:1)
将nonzero
与iat
一起使用
df.iat[(df.a==0).nonzero()[0][0],2]
Out[114]: 7