Pandas:如何从给定(行,列)对列表的 DataFrame 中检索值?
Posted
技术标签:
【中文标题】Pandas:如何从给定(行,列)对列表的 DataFrame 中检索值?【英文标题】:Pandas: how to retrieve values from a DataFrame given a list of (row, column) pairs? 【发布时间】:2021-01-29 09:39:54 【问题描述】:tldr;我想在 DataFrame 上传递一系列位置并接收一系列值,如果可能的话,使用 DataFrame 方法。
我有一个包含一些列和索引的数据框
import pandas as pd
df_a = pd.DataFrame(
'A':[0,1,3,7],
'B':[2,3,4,5], index=[0,1,2,3])
我想检索 DataFrame 上特定(行、列)位置的值
rows = [0, 2, 3]
cols = ['A','B','A']
df_a.loc[rows, cols] 返回一个 3x3 DataFrame
|A |B |A
0 0 2 0
2 3 4 3
3 7 5 7
我想要(row, col)值对应的一系列值,长度为3的一系列
[0, 4, 7]
在 pandas 中最好的方法是什么?
【问题讨论】:
【参考方案1】:当然!你可以使用DataFrame.lookup
来实现你想要的:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.lookup.html
import pandas as pd
df_a = pd.DataFrame('A':[0,1,3,7], 'B':[2,3,4,5], index=[0,1,2,3])
rows = [0, 2, 3]
cols = ['A','B','A']
values = df_a.lookup(rows, cols)
print(values)
array([0, 4, 7], dtype=int64)
【讨论】:
lookup
看起来不错。但我猜它比 numpy 保护伞下的索引要慢【参考方案2】:
Pandas 不支持那种索引,只支持numpy
>>> df.to_numpy()[rows, df.columns.get_indexer(cols)]
array([0, 4, 7])
【讨论】:
以上是关于Pandas:如何从给定(行,列)对列表的 DataFrame 中检索值?的主要内容,如果未能解决你的问题,请参考以下文章
请教用pandas处理数据时,如何对行数据进行筛选并赋值处理
如何使用 python 或 pandas 根据包含字典列表的列过滤 DataFrame?
如何创建一个新的 pandas 列,该列是索引范围中每个值的列表,不包括行值
pandas读取csv数据参数指定作为行索引的数据列索引列表形成复合(多层)行索引使用xs函数获取列切面数据(axis参数指定对列进行切面level参数指定列层索引名称key参数指定索引值)