总结:如果您只想创建几个列,请使用df[['new_col1','new_col2']] = df[['data1','data2']]。Apply (function_of_your_selection (x), axis=1)
对于这个解决方案,创建的新列数必须等于用作.apply()函数输入的列数。如果你想做别的事情,看看其他答案。
细节
假设你有两列数据框架。第一列是一个人10岁时的身高;第二个是20岁时的身高。
假设你需要计算每个人身高的平均值和每个人身高的和。每一行有两个值。
你可以通过下面即将应用的函数来实现:
def mean_and_sum(x):
"""
Calculates the mean and sum of two heights.
Parameters:
:x -- the values in the row this function is applied to. Could also work on a list or a tuple.
"""
sum=x[0]+x[1]
mean=sum/2
return [mean,sum]
你可以这样使用这个函数:
df[['height_at_age_10','height_at_age_20']].apply(mean_and_sum(x),axis=1)
(需要明确的是:这个apply函数接受子集数据帧中每一行的值,并返回一个列表。)
然而,如果你这样做:
df['Mean_&_Sum'] = df[['height_at_age_10','height_at_age_20']].apply(mean_and_sum(x),axis=1)
您将创建一个包含[mean,sum]列表的新列,这可能是您希望避免的,因为这将需要另一个Lambda/Apply。
相反,您希望将每个值分解到它自己的列中。要做到这一点,你可以一次创建两个列:
df[['Mean','Sum']] = df[['height_at_age_10','height_at_age_20']]
.apply(mean_and_sum(x),axis=1)