我有以下形状的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个新列(即col1
,col2
等),所以在我看来代码是正确的,它只返回{{1}中的4列}。我做错了什么?
答案 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
功能中提供您想要计算的内容的详细信息,那么我们可以尝试找到矢量化解决方案......