Применить лямбда-функцию для разных окон - PullRequest
0 голосов
/ 21 сентября 2019

Я хочу применить разные скользящие окна к моему фрейму данных, однако я получаю только значения NaN после использования функции apply в сочетании с лямбда-функцией.Как я могу решить это?

matrix = [(222, 34, 23),
     (333, 31, 11),
     (444, 16, 21),
     (555, 32, 22),
     (666, 33, 27),
     (777, 35, 11)
     ]

values = [2,3]
dfObj = pd.DataFrame(matrix, index = 
[dt.date(2019,12,31),dt.date(2019,1,31),dt.date(2019,2,28),dt.date(2019,3,31),dt.date(2019,4,30),
dt.date(2019,5,31)], columns=list('abc'))
Result = dfObj.apply(lambda x:x[dfObj.columns.values].rolling(2).sum())

   a    b    c
a NaN  NaN  NaN         
b NaN  NaN  NaN         
c NaN  NaN  NaN 

Мой желаемый результат должен выглядеть следующим образом:

test = []
test.append(dfObj.a.rolling(2).sum())
test.append(dfObj.a.rolling(3).sum())
test.append(dfObj.b.rolling(2).sum())
test.append(dfObj.b.rolling(3).sum())
test = pd.DataFrame(test).T

Я знаю, как написать это в хорошем цикле, но это только для пояснения

              a      a       b      b
2019-12-31   NaN    NaN     NaN    NaN
2019-01-31   555.0  NaN     65.0   NaN
2019-02-28   777.0  999.0   47.0   81.0
2019-03-31   999.0  1332.0  48.0   79.0
2019-04-30   1221.0 1665.0  65.0   81.0
2019-05-31   1443.0 1998.0  68.0   100.0

1 Ответ

0 голосов
/ 21 сентября 2019

Результат должен быть:

Result = dfObj.apply(lambda x:x[dfObj.columns.values],axis=1).rolling(2).sum()

вместо:

Result = dfObj.apply(lambda x:x[dfObj.columns.values].rolling(2).sum())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...