Как поднять столбец в панде DataFrame до последовательных полномочий - PullRequest
5 голосов
/ 11 октября 2019

Есть ли питонный способ поднять столбец в DataFrame (xRaw) до последовательных степеней? Есть ли что-то вроде

xRaw[:,k] = xRaw.pow(k) for k in range(1,6)

Ответы [ 3 ]

10 голосов
/ 11 октября 2019

Это матрица Вандермонда, в которой 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)
4 голосов
/ 11 октября 2019

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)
3 голосов
/ 11 октября 2019

Я бы сделал:

for i in range(6):
    xRaw["power: "+str(i)] = xRaw[column_to_be_raised] ** i

Это создаст новый столбец, который берет свою базу из столбца, который вы хотите поднять для каждого показателя в данном диапазоне.

...