如何 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]
我想将 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]