小能豆

如何将函数应用于 Pandas 数据框的两列

python

假设我有一个函数和一个数据框,定义如下:

def get_sublist(sta, end):
    return mylist[sta:end+1]

df = pd.DataFrame({'ID':['1','2','3'], 'col_1': [0,2,3], 'col_2':[1,4,5]})
mylist = ['a','b','c','d','e','f']

现在我想get_sublistdf的两列应用'col_1', 'col_2'元素计算一个新列'col_3'以获得如下输出:

  ID  col_1  col_2            col_3
0  1      0      1       ['a', 'b']
1  2      2      4  ['c', 'd', 'e']
2  3      3      5  ['d', 'e', 'f']

我试过

df['col_3'] = df[['col_1','col_2']].apply(get_sublist, axis=1)

但这导致

TypeError: get_sublist() missing 1 required positional argument:

我该怎么做?


阅读 43

收藏
2024-06-27

共1个答案

小能豆

要将get_sublist函数逐个元素应用于列'col_1''col_2'数据框,您需要修改apply语句以将列的值正确传递给函数。

以下是具体操作方法:

  1. 修改get_sublist函数以接受单行并提取函数内的开始和结束索引。
  2. 使用applywithaxis=1按行应用该函数。

修改后的代码如下:

import pandas as pd

def get_sublist(row):
    sta, end = row['col_1'], row['col_2']
    return mylist[sta:end+1]

df = pd.DataFrame({'ID':['1','2','3'], 'col_1': [0,2,3], 'col_2':[1,4,5]})
mylist = ['a','b','c','d','e','f']

df['col_3'] = df.apply(get_sublist, axis=1)

print(df)

这将为您提供所需的输出:

  ID  col_1  col_2            col_3
0  1      0      1       ['a', 'b']
1  2      2      4  ['c', 'd', 'e']
2  3      3      5  ['d', 'e', 'f']

解释

  • get_sublist(row):该函数现在将单行作为输入,并从列和中提取sta和索引。end``'col_1'``'col_2'
  • df.apply(get_sublist, axis=1):该apply方法用于将get_sublist函数应用于每一行(因为axis=1)。

通过将整行传递给函数,您可以轻松访问多列并执行所需的操作。

2024-06-27