【问题标题】:Assigning multiple function outputs to separate columns in pandas dataframe in python在python中将多个函数输出分配给pandas数据框中的单独列
【发布时间】:2023-04-10 10:44:01
【问题描述】:

我有一个具有 3 个输出的函数,为了提高效率,我想将该函数应用于我的数据框中的所有行。目前我调用该函数 3 次,每列/输出一次,但我想调用该函数一次并将所有 3 个输出保存到 3 个单独的列。但目前我找不到分配输出的方法。

理想情况下,我想要...

df2[col1, col2, col3] = function(x,y)

这是我当前的代码。

def getTextureMetrics(row,abb_name):
#tic=time.time()
d2=row[[col for col in ds.columns if abb_name+'_2' in col]].values #offset distance 2
maxOffset2=maxDiff(d2)
d6=row[[col for col in ds.columns if abb_name+'_6' in col]].values #offset distance 6
maxOffset6=maxDiff(d6)
d10=row[[col for col in ds.columns if abb_name+'_10' in col]].values #offset distance 10
maxOffset10=maxDiff(d10)
#print(tic-time.time())
return maxOffset2, maxOffset6, maxOffset10

for abb_name in unique(abb_names):
tic=time.time()
exec('df2["'+abb_name+'_2"]=df2.apply (lambda row: getTextureMetrics(row,abb_name)[0],axis=1)' )
exec('df2["'+abb_name+'_6"]=df2.apply (lambda row: getTextureMetrics(row,abb_name)[1],axis=1)' )
exec('df2["'+abb_name+'_10"]=df2.apply (lambda row: getTextureMetrics(row,abb_name)[2],axis=1)' )

【问题讨论】:

标签: python pandas lambda assign


【解决方案1】:

您可以将applyresult_type='expand' 一起使用:

df2 = df.apply(lambda x: function(x), result_type='expand', axis=1)

例子:


def function(x):
    return x.col1 + '_2' , x.col2 + '_6', x.col3 + '_10'

d = { 'col1' : ['John', 'Mark Dupont', 'Max'],
      'col2' : ['John Doe', 'Mark 40', 'Edith'],
      'col3' : ['John Doe 40', 'Something', 'Edith']}

df = pd.DataFrame(data = d)
df = df.apply(lambda x: function(x), result_type='expand', axis=1)
df

0   1   2
0   John_2  John Doe_6  John Doe 40_10
1   Mark Dupont_2   Mark 40_6   Something_10
2   Max_2   Edith_6 Edith_10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-23
    • 2013-06-19
    • 2016-10-13
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    相关资源
    最近更新 更多