1

我写了一个类似下面的函数。该函数需要一个多级数据框。column_name参数可以是 ['Deal Name','Deal Expense']。要过滤多级数据框,我需要在数据框过滤器中解压缩 column_name 列表。

我希望类似的东西df[*column_name].loc[row_name] 会起作用,但它没有。

更多信息:我正在尝试访问多级数据框。column_name[0] 是我想要在级别 0 上的列的名称,column_name[1] 是我想要在级别 1 上的列的名称,依此类推。

def search_table(row_name, column_name):
    if header == 1:
        output = df.at[row_name, column_name]
    elif header == 2:
        output = df[column_name[0], column_name[1]].loc[row_name]
    elif header == 3:
        output = df[column_name[0], column_name[1], column_name[2]].loc[row_name]
    elif header == 4:
        output = df[column_name[0], column_name[1], column_name[2], column_name[3]].loc[row_name]
    return output

这个函数可以完成这项工作,但是写起来真的很傻。如何解压数据框切片器中的列表?

4

1 回答 1

0

我不确定我是否理解您的标头参数的作用,pandas 数据帧可以按列名数组进行切片。因此,您可以在没有 python 列表解包运算符 (*) 的情况下直接通过列数组访问,如下所示:

def search_table(row_name, column_name):
    if header == 1:
        return df.at[row_name, column_name]
    elif header >= 2:
        return df[column_name].loc[row_name]
于 2019-08-26T13:51:40.077 回答