假设我有一个函数和一个数据框,定义如下:
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_sublist对df的两列应用'col_1', 'col_2'元素计算一个新列'col_3'以获得如下输出:
get_sublist
df
'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:
我该怎么做?
要将get_sublist函数逐个元素应用于列'col_1'和'col_2'数据框,您需要修改apply语句以将列的值正确传递给函数。
'col_1'
'col_2'
apply
以下是具体操作方法:
axis=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)
这将为您提供所需的输出:
get_sublist(row)
sta
end``'col_1'``'col_2'
df.apply(get_sublist, axis=1)
通过将整行传递给函数,您可以轻松访问多列并执行所需的操作。