gpt4 book ai didi

python - 使用 apply + 函数为 pandas 数据框创建多个新列

转载 作者:行者123 更新时间:2023-12-01 02:32:03 29 4
gpt4 key购买 nike

我有一个以下形状的 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: Shape of passed values is (763, 4), indices imply (763, 65)

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

最佳答案

演示:

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 循环 - 也就是说,它不是矢量化的,并且与矢量化的 Pandas/Numpy ufunc 相比,运行速度慢得多

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

关于python - 使用 apply + 函数为 pandas 数据框创建多个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46696807/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com