Python Pandas кумулятивное умножение - PullRequest
0 голосов
/ 13 сентября 2018

Я создал небольшой фрейм данных и хочу умножить 0,5 на предыдущую строку и так далее.

In:

1
2
3
4

Out:

1
0.5
0.25
0.125

Я пробовал следующее, но не работает правильно.Это не кумулятивный и, скажем, вечный.

x = pd.DataFrame([1, 2, 3, 4])
y = np.zeros(x.shape)

y[0] = 1
yd = pd.DataFrame(y)

k =  yd.shift(1) * 0.5

print (k)

Есть идеи?Спасибо


2-й более сложный вопрос, основанный на предыдущем выпуске.

data['y'] = np.where((data['a']<50) & (data['b']>0), data['initial'], pd.Series(0.99, data['y'].index).cumprod() / 0.99)

Я попробовал этот код, но он не работает.Если предпосылки верны, тогда вызовите «начальный», в противном случае перейдите к кумулятивному умножению.

1 Ответ

0 голосов
/ 13 сентября 2018

Используйте numpy.power

np.power(.5, x - 1)

       0
0  1.000
1  0.500
2  0.250
3  0.125

Или, как указано @ DSM (более интуитивно)

.5 ** (x - 1)

       0
0  1.000
1  0.500
2  0.250
3  0.125

С другой стороны, если вам нужны строго последовательные полномочия .5

.5 ** pd.Series(range(len(x)))

0    1.000
1    0.500
2    0.250
3    0.125
dtype: float64

Другая альтернатива с cumprod

pd.Series(.5, x.index).cumprod() / .5

0    1.000
1    0.500
2    0.250
3    0.125
dtype: float64

Или

pd.Series({**dict.fromkeys(range(4), .5), **{0: 1}}).cumprod()

0    1.000
1    0.500
2    0.250
3    0.125
dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...