如何将 pandas DataFrame 中的列提升为连续的幂
How to raise a column in pandas DataFrame to consecutive powers
是否有一种 pythonic 方法可以将 DataFrame (xRaw
) 中的列提升为连续的幂?有没有类似
xRaw[:,k] = xRaw.pow(k) for k in range(1,6)
这是一个Vandermonde矩阵,numpy有内置函数np.vander
如果你有
s = pd.Series([1,2,3,4,5])
然后
np.vander(s, 6)
array([[ 1, 1, 1, 1, 1, 1],
[ 1, 2, 4, 8, 16, 32],
[ 1, 3, 9, 27, 81, 243],
[ 1, 4, 16, 64, 256, 1024],
[ 1, 5, 25, 125, 625, 3125]])
要添加回 df
,您可以使用 concat
df = pd.concat([df, pd.DataFrame(vander)], axis=1)
我会做:
for i in range(6):
xRaw["power: "+str(i)] = xRaw[column_to_be_raised] ** i
这将生成一个新列,该列的底数取自您要为给定范围内的每个指数增加的列。
Numpy 广播
s.values**np.arange(6)[:,None]
Out[70]:
array([[ 1, 1, 1, 1, 1],
[ 2, 4, 8, 16, 32],
[ 3, 9, 27, 81, 243],
[ 4, 16, 64, 256, 1024],
[ 5, 25, 125, 625, 3125]], dtype=int64)
将其分配回去
s= pd.concat([s, pd.DataFrame(s.values**np.arange(6)[:,None],index=s.index)], axis=1)
是否有一种 pythonic 方法可以将 DataFrame (xRaw
) 中的列提升为连续的幂?有没有类似
xRaw[:,k] = xRaw.pow(k) for k in range(1,6)
这是一个Vandermonde矩阵,numpy有内置函数np.vander
如果你有
s = pd.Series([1,2,3,4,5])
然后
np.vander(s, 6)
array([[ 1, 1, 1, 1, 1, 1],
[ 1, 2, 4, 8, 16, 32],
[ 1, 3, 9, 27, 81, 243],
[ 1, 4, 16, 64, 256, 1024],
[ 1, 5, 25, 125, 625, 3125]])
要添加回 df
,您可以使用 concat
df = pd.concat([df, pd.DataFrame(vander)], axis=1)
我会做:
for i in range(6):
xRaw["power: "+str(i)] = xRaw[column_to_be_raised] ** i
这将生成一个新列,该列的底数取自您要为给定范围内的每个指数增加的列。
Numpy 广播
s.values**np.arange(6)[:,None]
Out[70]:
array([[ 1, 1, 1, 1, 1],
[ 2, 4, 8, 16, 32],
[ 3, 9, 27, 81, 243],
[ 4, 16, 64, 256, 1024],
[ 5, 25, 125, 625, 3125]], dtype=int64)
将其分配回去
s= pd.concat([s, pd.DataFrame(s.values**np.arange(6)[:,None],index=s.index)], axis=1)