从返回元组的函数创建新的Pandas DataFrame列

3

我有一个返回元组的函数:

def pwrs(x):
   return x*x, x*x*x, x*x*x*x

我想将此函数应用于名为data的单列数据框:
+-------+
|    x  |
+-------+
|    1  |
|    2  |
|    3  |
|    4  |
+-------+

根据函数返回的元组,获取一个新的数据框,并基于该元组返回一个带有新列的数据框:

+---+------+------+------+
| x |  x^2 |  x^3 |  x^4 |
+---+------+------+------+
| 1 |    1 |    1 |    1 |
| 2 |    4 |    8 |   16 |
| 3 |    9 |   27 |   81 |
| 4 |   16 |   64 |  256 |
+---+------+------+------+

已完成遍历行并应用该函数的部分:

for _, row in data.iterrows():
    print(pwrs(row['x']))

不确定如何继续下一步...

1
np.vander可能会有用。 - ALollz
4个回答

4

通用化

c = np.arange(1, 5)
pd.DataFrame(df.to_numpy() ** c, df.index, c).add_prefix('x^')

   x^1  x^2  x^3  x^4
0    1    1    1    1
1    2    4    8   16
2    3    9   27   81
3    4   16   64  256

3

IIUC

pd.DataFrame(df.x.values[:,None]**np.array([1,2,3,4]))
Out[290]: 
   0   1   2    3
0  1   1   1    1
1  2   4   8   16
2  3   9  27   81
3  4  16  64  256

2

如果您想使用该函数,只需将数据帧列作为参数即可:

df['x^2'], df['x^3'], df['x^4'] = pwrs(df['x'])


   x  x^2  x^3  x^4
0  1    1    1    1
1  2    4    8   16
2  3    9   27   81
3  4   16   64  256

1
你可以这样做:

df[['x^2', 'x^3', 'x^4']] = df.x.apply(lambda x: pd.Series(pwrs(x)))
print(df)

输出

   x  x^2  x^3  x^4
0  1    1    1    1
1  2    4    8   16
2  3    9   27   81
3  4   16   64  256

请注意,这适用于返回元组的任何函数,不仅限于数学运算。

1
这种方法避免了我在其他建议中遇到的元组解包错误。 - Leon Adams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接