如何使用条件索引在单元格上获取标量值

Posted

技术标签:

【中文标题】如何使用条件索引在单元格上获取标量值【英文标题】:How to get scalar value on a cell using conditional indexing 【发布时间】:2015-08-29 01:19:17 【问题描述】:

我有如下所示的数据框。我需要获取 B 列的标量值,这取决于 A 的值(这是我脚本中的一个变量)。我正在尝试 loc() 函数,但它返回一个 Series 而不是一个标量值。如何获得标量值()?

>>> x = pd.DataFrame('A' : [0,1,2], 'B' : [4,5,6])
>>> x
   A  B
0  0  4
1  1  5
2  2  6

>>> x.loc[x['A'] == 2]['B']
2    6
Name: B, dtype: int64

>>> type(x.loc[x['A'] == 2]['B'])
<class 'pandas.core.series.Series'>

【问题讨论】:

How to get a value from a cell of a data frame?的可能重复 我确实阅读了上面引用的帖子。我的问题是条件索引部分(即 x['A'] == 2)。不知道如何让它与 at()、iat() 一起工作。谢谢。 【参考方案1】:

首先,您最好从.loc 访问行索引和列索引:

x.loc[x['A'] == 2, 'B']

其次,您始终可以在系列或数据帧上使用 .values 获取底层 numpy 矩阵:

In : x.loc[x['A'] == 2, 'B'].values[0]
Out: 6

最后,如果您对原始问题的“条件索引”不感兴趣,还有专门设计用于从 DataFrame 获取单个标量值的访问器:dataframe.at[index, column]dataframe.iat[i, j](这些类似于 @987654331 @ 和 .iloc[] 但设计用于快速访问单个值)。

【讨论】:

“你最好从 .loc 访问行和列索引”我想知道这是什么原因。你的意思是?为什么这比 OP 中发布的方式更好?谢谢 pandas.pydata.org/pandas-docs/stable/… .values[0] 只是为了获得实际的单元格值是如此笨拙。 Pandas 开发人员应该真正改进这一点。 get_value 现已弃用(v0.21.0 RC1(2017 年 10 月 13 日))reference is here.get_value and .set_value on Series, DataFrame, Panel, SparseSeries, and SparseDataFrame are deprecated in favor of using .iat[] or .at[] accessors (GH15269) x.set_index('A').at[2, 'B']【参考方案2】:

详细阐述@ShineZhang 评论:

x.set_index('A').at[2, 'B']

6

pd.__version__

你'0.22.0'

【讨论】:

这个答案非常简短。或许您可以稍微解释一下它是如何工作的。

以上是关于如何使用条件索引在单元格上获取标量值的主要内容,如果未能解决你的问题,请参考以下文章

如何在不同条件下在同一位置的 uitableview 单元格上使用 imageview 和 textfield

如何根据张量流中的列条件获取张量值的索引

Python:请求 json 出错 - 如果使用所有标量值,则必须传递索引

从 api 获取所有数据以及如何在 swift ios 中仅在单元格上附加标题

如何通过单击 tableview 单元格上的按钮获取文档 ID?

如何在自定义 UITableView 单元格上获取 UITextField 值