如何使用函数正确索引数据框?

问题描述 投票:0回答:1

给定一个数据框:

   a  b  c
u  5  0  3
v  3  7  9
w  3  5  2

我想使用函数选择数据框中的行/列。该函数获取数据帧并返回标签列表的元组,例如它使用这个 lambda 返回

['v', 'u'], ['c']

get_labels = lambda df: (['v', 'u'], ['c'])

如果我将

.loc
与标签文字一起使用,我会得到所需的结果:

df.loc[['v', 'u'], ['c']]

   c
v  9
u  3

文档说关于使用函数(可调用),返回两个标签列表的函数是有效的(“以上之一”):

具有一个参数(调用 Series 或 DataFrame)的可调用函数,并返回用于索引的有效输出(上述之一)

但是,如果我将

.loc
与函数一起使用,我相信该函数返回相同的列表元组,则会收到错误:

df.loc[get_labels]

unhashable type: 'list'

怎么了? (作为一个可能的线索:Pandas 似乎试图用函数的结果创建一个

Index
对象——不知道为什么,文档中没有解释。)


完整代码:

import numpy.random as npr
import pandas as pd
npr.seed(0)

df = pd.DataFrame(npr.randint(10, size=(3,3)),
                  index=['u','v','w'],
                  columns=['a','b','c'])

get_labels = lambda df: (['v', 'u'], ['c'])
print(df.loc[['v', 'u'], ['c']])
print(df.loc[get_labels])
python pandas indexing
1个回答
0
投票

您需要调用您的函数:

df.loc[get_labels(df)]

链式使用:

df.pipe(lambda x: x.loc[get_labels(x)])

输出:

   c
v  9
u  3
© www.soinside.com 2019 - 2024. All rights reserved.