У меня больше опыта с R's data.table
, но я пытаюсь узнать pandas
. В data.table
, я могу сделать что-то вроде этого:pandas: как выполнять несколько операций с групповым применением
> head(dt_m)
event_id device_id longitude latitude time_ category
1: 1004583 -100015673884079572 NA NA 1970-01-01 06:34:52 1 free
2: 1004583 -100015673884079572 NA NA 1970-01-01 06:34:52 1 free
3: 1004583 -100015673884079572 NA NA 1970-01-01 06:34:52 1 free
4: 1004583 -100015673884079572 NA NA 1970-01-01 06:34:52 1 free
5: 1004583 -100015673884079572 NA NA 1970-01-01 06:34:52 1 free
6: 1004583 -100015673884079572 NA NA 1970-01-01 06:34:52 1 free
app_id is_active
1: -5305696816021977482 0
2: -7164737313972860089 0
3: -8504475857937456387 0
4: -8807740666788515175 0
5: 5302560163370202064 0
6: 5521284031585796822 0
dt_m_summary <- dt_m[,
.(
mean_active = mean(is_active, na.rm = TRUE)
, median_lat = median(latitude, na.rm = TRUE)
, median_lon = median(longitude, na.rm = TRUE)
, mean_time = mean(time_)
, new_col = your_function(latitude, longitude, time_)
)
, by = list(device_id, category)
]
Новые колонки (mean_active
через new_col
), а также device_id
и category
, появится в dt_m_summary
. Я мог бы также сделать подобное by
преобразование в исходной таблице, если я хочу новый столбец результатов GroupBy применить:
dt_m[, mean_active := mean(is_active, na.rm = TRUE), by = list(device_id, category)]
(в случае, если я хотел, например, чтобы выбрать строки, где mean_active
превышает некоторый порог или делает что-то еще).
Я знаю, что есть groupby
в pandas
, но я не нашел способ сделать вид простых преобразований, как указано выше. Лучшее, что я мог придумать, это сделать серию groupby-apply's, а затем объединить результаты в один dataframe
, но это кажется очень неуклюжим. Есть ли лучший способ сделать это?
Не забудьте лямбда.'new_col = your_function (широта, долгота, время_)' – Alexander
Итак, как бы назвал бы 'my_function' принятие нескольких аргументов? Представьте, что это долгая функция с кучей линий. –
Проблема, которую я вижу, заключается в том, что в моей работе редко бывает, что только одна переменная преобразуется некоторой функцией. Обычно мне не нужно найти сумму только А. У меня есть функция, которая может занимать несколько столбцов данных. Затем мне нужно, чтобы результаты этой функции применялись к агрегированным строкам (похожие на X и Y) и имеют выбор для вызова столбцов. Вы говорите, что мне нужно предварительно генерировать столбцы в новом фреймворке данных, а затем ... что? –