Поиск кумулятивных функций в фрейме данных? - PullRequest
0 голосов
/ 16 марта 2019

У меня есть датафрейм с примерно 200 объектами и 3000 строками.Эти выборки данных регистрируются в разное время, в основном один раз в месяц, как показано в приведенном ниже примере в «col101»:

   0    col1 (id)    col2.    col3   ….   col100    col101 (date)  …     col2000 (target value)
   1        001         653.    675   ….      343.3   01-02-2017.   …                1
   2        001         673.    432   ….      387.3   01-03-2017.   …            0
   3        001         679.    528   ….      401.2   01-04-2017.   …            1
   4        001         685     223   ….      503.4   01-05-2017.   …            1
   5        002         343     428   ….      432.5   01-02-2017.   …            0
   6        002         479.    421   ….      455.3   01-03-2017.   …            0
   7         …             …         …     ….          …               ….            …            .. 

В рамках этих функций некоторые из них являются накопительными данными, так что в каждом месяце их значения имеютбыл увеличен.Например, col2 и col100 являются накопительными функциями в моем фрейме данных.Поэтому я хочу добавить еще один столбец для каждой кумулятивной функции с разницей относительно предыдущего месяца.Итак, мой желаемый фрейм данных должен выглядеть примерно так:

 0  col1 (id)    col2.   col2c   ….    col100     col100c  col101 (date)  …   col2000 (targeva)
 1      001         653.    653  ….    343.3       343.3    01-02-2017.   …            1
 2      001         673.    23   ….    387.3        44      01-03-2017.   …            0
 3      001         679.     6   ….    401.2        13.9    01-04-2017.   …            1
 4      001         685      6   ….    503.4       102.2    01-05-2017.   …            1
 5      002         343     343  ….    432.5       432.5    01-02-2017.   …            0
 6      002         479.    136  ….    455.3        23.2    01-03-2017.   …            0
 7       …             …         …     ….          …               ….            …            .. 

Теперь у меня есть две проблемы: 1) как я могу автоматически распознавать эти накопительные функции с 200 функциями?и как добавить эту дополнительную функцию (например, col22c и col100c) для каждого совокупного атрибута?Кто-нибудь знает, как я могу справиться с этим?

1 Ответ

1 голос
/ 16 марта 2019

Чтобы различать два столбца, вы можете использовать встроенную функцию панд diff().diff() вычисляет разницу каждого элемента по сравнению с предыдущим.Но обратите внимание, что, поскольку первый элемент не имеет никакого предыдущего элемента, первый элемент в результате diff() будет NaN.Поэтому мы используем встроенную функцию dropna() для сброса всех NaN значений.

Но что касается обнаружения накопительных столбцов, я не думаю, что будет какой-либо путь.Вы МОЖЕТЕ найти все столбцы, которые всегда увеличиваются (монотонно), но это не означает, что они обязательно являются кумулятивными.

В любом случае для обнаружения монотонных столбцов вы можете сначала получить их diff().dropna(), а затем проверьте, все ли положительные значения:

df = some_data_frame
col_diff = df['some_column'].diff().dropna()
is_monotonic = all(col_diff > 0)

Обратите внимание, что если вы забудете dropna(), результат all(col_diff > 0) всегда будет False (поскольку NaNзначение Falsy)

...