使用apply + function为pandas dataframe创建多个新列

时间:2017-10-11 20:16:23

标签: python pandas dataframe apply

我有以下形状的pandas数据框df(763, 65)

我使用以下代码创建4个新列:

df[['col1', 'col2', 'col3','col4']] = df.apply(myFunc, axis=1)

def myFunc(row):
    #code to get some result from another dataframe
    return result1, result2, result3, result4

myFunc中返回的数据框的形状为(1, 4)。代码遇到以下错误:

  

ValueError:传递值的形状是(763,4),索引暗示(763,65)

我知道df有65列,而myFunc返回的数据只有4列。但是,我只想创建4个新列(即col1col2等),所以在我看来代码是正确的,它只返回{{1}中的4列}。我做错了什么?

1 个答案:

答案 0 :(得分:2)

演示:

In [40]: df = pd.DataFrame({'a':[1,2,3]})

In [41]: df
Out[41]:
   a
0  1
1  2
2  3

In [42]: def myFunc(row):
    ...:     #code to get some result from another dataframe
    ...:     # NOTE: trick is to return pd.Series()
    ...:     return pd.Series([1,2,3,4]) * row['a']
    ...:

In [44]: df[['col1', 'col2', 'col3','col4']] = df.apply(myFunc, axis=1)

In [45]: df
Out[45]:
   a  col1  col2  col3  col4
0  1     1     2     3     4
1  2     2     4     6     8
2  3     3     6     9    12

免责声明:尽量避免使用.apply(..., axis=1) - 因为它是for loop引擎盖 - 即它没有矢量化并且可以正常工作 更慢。

PS如果您要在myFunc功能中提供您想要计算的内容的详细信息,那么我们可以尝试找到矢量化解决方案......