如何 return 包含 pandas 中的列表的多个值应用函数?

How to return multiple values including a list in pandas apply function?

我想将 return 多个值的函数应用于我的数据框,以便将这些值收集在不同的列中。我们如何实现这一目标?

最小可重现代码:

import pandas as pd
df=pd.DataFrame({'col1':[1,2,3,4,5], 'col2':['a','b','c','d','e']})

哪个 return 是 table:

col1 col2
0 1 a
1 2 b
2 3 c
3 4 d
4 5 e

现在我希望 return 值之一是一个列表,所以根据 this Whosebug question 的回答,我创建了一个空列 astype(object)

import numpy as np
df['e']=np.nan
df['e']=df['e'].astype('object')

按照 this question 中接受的答案,我 return 的值是这样的:

def funct(a,b):
  c=str(a)+b
  d=b+str(a)
  return[c,d,[c,d]]

如果我想将输出保存到三列 c、d、e,我正在尝试:

df[['c','d','e']]=df.apply(lambda x: funct(x['col1'],x['col2']), axis=1)

给出错误:

ValueError: Must have equal len keys and value when setting with an iterable

如果我运行

df['c','d','e']=df.apply(lambda x: funct(x['col1'],x['col2']), axis=1)

return值为:

| i|col1| col2 |(c, d, e)         |
|:-|:--:|------|------------------:
|0 |  1 |  a   |[1a, a1, [1a, a1]]|
|1 |  2 |  b   |[2b, b2, [2b, b2]]|
|2 |  3 |  c   |[3c, c3, [3c, c3]]|
|3 |  4 |  d   |[4d, d4, [4d, d4]]|
|4 |  5 |  e   |[5e, e5, [5e, e5]]|

如何获得:

|  | col1 |col2| c | d | e      |
|:-|:----:|:--:|:-:|:-:|------- |
|0 | 1    |a   |1a |a1 |[1a, a1]|
|1 | 2    |b   |2b |b2 |[2b, b2]|
|2 | 3    |c   |3c |c3 |[3c, c3]|
|3 | 4    |d   |4d |d4 |[4d, d4]|
|4 | 5    |e   |5e |e5 |[5e, e5]|

您可以 result_type='expand' 应用现有函数:

df[['c','d','e']]=(df.apply(lambda x: funct(x['col1'],x['col2']),
                  axis=1,result_type='expand')

print(df)

   col1 col2   c   d         e
0     1    a  1a  a1  [1a, a1]
1     2    b  2b  b2  [2b, b2]
2     3    c  3c  c3  [3c, c3]
3     4    d  4d  d4  [4d, d4]
4     5    e  5e  e5  [5e, e5]