【问题标题】:Pandas: how to retrieve values from a DataFrame given a list of (row, column) pairs?Pandas:如何从给定(行,列)对列表的 DataFrame 中检索值?
【发布时间】: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 中最好的方法是什么?

【问题讨论】:

    标签: pandas performance indexing slice pandas-loc


    【解决方案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])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 2018-05-10
      • 2019-08-31
      • 2021-08-24
      • 1970-01-01
      相关资源
      最近更新 更多