-1

我有一些代码使用一个名为 function 的函数填充两个列表,该函数返回两个值。该函数需要一些位于数据框行内的参数。然后我将列表附加到我的数据框中的新列。

data = [[45, 'F', 'Jill', 'USA'], [87, 'm', 'Jeff', 'Poland'], [99, 'M', 'Tim', 'Peru']]

df = pd.DataFrame(data, ['Age', 'Sex', 'Name', 'Location']


new_column1 = []
new_column2 = []

for member in tqdm(range(len(df))):
        list1, list2 = (function(df['Age'][member], df['Sex'][member], df['Name'][member], df['Location'][member]))
        
        new_column1.append(list1)
        new_column2.append(list2)

我想知道是否有更快的方法来使用apply. 我投入了 tqdm,因为每个人都喜欢知道他们必须等待多长时间。对于它的价值,函数的输出是一个浮点数和一个列表。

有一个更好的方法吗?我觉得这有点基本,我想要一些优雅和高效的东西。有没有办法使用应用来做到这一点?我想最终在某个时候使用 swifter 包。

更新

我不明白为什么这不起作用。

df[['New_column1', 'New_column2']] = df[['Age', 'Sex', 'Name', 'Location']].swifter.applymap(function)

我收到一个错误,该函数缺少 3 个必需的位置参数:“Sex”、“Name”和“Location”。

4

1 回答 1

1

这是你想要的?

import pandas as pd
df = pd.DataFrame({'Name':['Alice','Bob'],'Age':[20,19],'Sex':['F','M'],'Location':['Berlin','San Sebastian']})

nested_list = df.values.tolist() #each pd row into list 

list1, list2 = map(list, nested_list)# nested list into separate lists

print(df,'\n')
>>    Name  Age Sex       Location
>>0  Alice   20   F         Berlin
>>1    Bob   19   M  San Sebastian 


print(f'{list1=}')
>>list1=['Alice', 20, 'F', 'Berlin']

print(f'{list2=}')
>>list2=['Bob', 19, 'M', 'San Sebastian']

编辑

import pandas as pd
import swifter

df = pd.DataFrame({'Name':['Alice','Bob'],'Age':[20,19],'Sex':['F','M'],'Location':['Berlin','San Sebastian']})

list1, list2 = map(list, df.swifter.apply(list,axis = 1))

print(df,'\n')

print(f'{list1=}')

print(f'{list2=}')

在此处输入图像描述

于 2022-01-14T00:14:24.187 回答