Pandas Groupby pct_change no pad - PullRequest
       10

Pandas Groupby pct_change no pad

0 голосов
/ 08 ноября 2018

Делая процентное изменение и все работает хорошо, за исключением заполнения, я попытался установить pct_change (fill_method = None), но я получаю ошибку:

fill = getattr (self, fill_method) (limit = limit)

TypeError: getattr (): имя атрибута должно быть строкой

я группирую по именам и ожидаю, что первые 3 значения каждого имени будут нан. Но что он делает, он обрабатывает все значения как часть списка и вычисляет pct_change для всех. В примере это работает для foo, но не для других имен. пожалуйста, смотрите код ниже.

import pandas as pd
import numpy as np


np.random.seed(7) 
df = pd.DataFrame(np.random.randn(40, 1))

a=10*('foo',)
b=10*('bar',)
c=10*('laa',)
d=10*('loo',)
df['names']=a+b+c+d

df['percentage_change']=df.groupby('names')[0].pct_change(periods=3)

что я получу:

names      pct change
foo        nan
foo        nan
foo        nan
foo        -.7589
foo       .693195
...       ....
bar       -.6435
bar       -1.16857
bar       -.158
bar       -.582117

что я ожидаю, это

names      pct change
foo        nan
foo        nan
foo        nan
foo        -.7589
foo       .693195
...       ....
bar       nan
bar       nan
bar       nan
bar       -.582117

1 Ответ

0 голосов
/ 08 ноября 2018

Это известная проблема в pandas 0.23.

Один из способов - использовать apply:

df['percentage_change'] = df.groupby('names')[0].apply(lambda x: x.pct_change(periods=3))

           0 names  percentage_change
0   1.690526   foo                NaN
1  -0.465937   foo                NaN
2   0.032820   foo                NaN
3   0.407516   foo          -0.758941
4  -0.788923   foo           0.693195
5   0.002066   foo          -0.937064
6  -0.000890   foo          -1.002185
7  -1.754724   foo           1.224202
8   1.017658   foo         491.675907
9   0.600499   foo        -675.425038
10 -0.625429   bar                NaN
11 -0.171548   bar                NaN
12  0.505299   bar                NaN
13 -0.261356   bar          -0.582117
14 -0.242749   bar           0.415048
15 -1.453241   bar          -3.876001
16  0.554580   bar          -3.121931
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...