Вопросы с тегами [pandas-groupby]

3

голосов
2

ответ
21

Просмотры

Dataframe GroupBy - список значений

У меня есть следующий dataframe: driver_id статус dttm 9f8f9bf3ee8f4874873288c246bd2d05 бесплатно 2018-02-04 00:19 9f8f9bf3ee8f4874873288c246bd2d05 занят 2018-02-04 1:03 8f174ffd446c456eaf3cca0915d0368d бесплатно 2018-02-03 15:43 8f174ffd446c456eaf3cca0915d0368d 2018-02-03 17:02 по маршруту 3 колонки: driver_id, статус, dttm Что мне нужно сделать, это группы по идентификатору водителя и сделать список всех статусов с их соответствующими значениями dttm в новую колонку под названием «driver_info»: driver_id driver_info 9f8f9bf3ee8f4874873288c246bd2d05 [( «свободный», 2018-02- 04 00:19), ( "занят", 2018-02-04 1:03)] 8f174ffd446c456eaf3cca0915d0368d [( "свободный", 2018-02-03 15:43), ( "по маршруту", 2018-02-03 17: 02) ...] Как сделать это в Python 3? Я попытался ДФГ = df.groupby (»
Egor Maksimov
1

голосов
2

ответ
45

Просмотры

what is different between groupby.first, groupby.nth, groupby.head when as_index=False

Edit: новобранец ошибка, которую я сделал в строке np.nan указав путем @coldspeed, @ вэнь-Бен, @ALollz. Ответы довольно хорошо, так что я не удалить этот вопрос, чтобы ответы на эти вопросы. Оригинал: Я прочитал этот вопрос / ответ Какая разница между groupby.first () и groupby.head (1)? Этот ответ объяснил, что различия по обработке значения NaN. Однако, когда я называю GroupBy с as_index = False, они оба подобрать NaN штраф. Кроме того, Панды имеют groupby.nth с аналогичной функциональностью на голову, и в первую Что разница groupby.first (), groupby.nth (0), groupby.head (1) с as_index = False? Пример ниже: В работе [448]: ДФ Из [448]: АВ 0 1 np.nan 1 1 4 2 1 14 3 2 4 8 2 19 5 2 12 В работе [449]: df.groupby ( 'А', as_index = False) .Head (1) Из [449]: AB 0 1 нп. нан 3 2 8 В [450]: df.groupby ( 'A', as_index = False) .first () Из [450]: AB 0 1 1 2 np.nan 8 в [451]: df.groupby (A ' 'as_index = False) .nth (0) Из [451]: АВ 0 1 2 3 np.nan 8 Я видел, что `пихты ()' сбрасывает индекс, а другой 2 не делает. Кроме того, есть ли какое-либо различие?
Andy L.
1

голосов
1

ответ
507

Просмотры

Создание dataframe на основе значений столбцов другого dataframe

У меня есть dataframe, как 20000 Х 50. Два из столбцов дата и время (представлено в виде часа). Остальные столбцы имеют наблюдения некоторых параметров во времени. То, что я пытаюсь добиться, это создать новый dataframe который средние всех остальных значений столбцов на каждые 3 часа в день и создает идентификатор столбцы для этого, которые могут быть числами от 1 до 8. Каждый составляет 3 часа диапазон. Я прилагаю изображение источника и что должно быть результатом. Любая помощь очень высоко ценится. Данные
Techflu
1

голосов
2

ответ
27

Просмотры

Выход dataframe Панды

У меня есть следующая панда кадр данных, созданный. # USR / бен / Python импорта панды как PD VALS = [1, 2, 3] ctry_grp = [ 'США', 'США', 'США'] state_grp = [ 'МА', 'МА', 'КТ'] country_mean = pd.DataFrame ({ 'ценности': Vals, 'страна': ctry_grp, 'состояние': state_grp}).. GroupBy ([ 'страна']) означают () для печати (country_mean) state_mean = pd.DataFrame ({» значения ': Vals,' страна ': ctry_grp,' состояние ':. state_grp}) GroupBy (. [' страна», 'состояние']) означают () печать (state_mean) выход для country_mean в приведенном выше коде находится в формат значений страны США 2 Я хочу, чтобы получить выход в формате [2, 2, 2] Выход для state_mean для приведенного выше кода в формате государственного значения Страна США CT 3.0 MA 1.5 Я хочу, чтобы получить выход в формате [1,5, 1,5, 3] Пожалуйста, помогите изменить код выше. Заранее спасибо.
Maa
1

голосов
0

ответ
155

Просмотры

How to do qualitative entropy aggregation in python pandas DataFrame

Давайте предположим, что у нас есть панд DataFrame, который выглядит, как: | ----------- | ---------- | ----- | | member_id | group_id | погладить | | ----------- | ---------- | ----- | | 111 | ааа | кот | | 222 | ааа | собака | | 333 | ааа | кот | | 444 | ааа | крыса | | 555 | БББ | кот | | 666 | БББ | кот | | 777 | БББ | собака | | 888 | БББ | собака | | 999 | ссс | крыса | | ----------- | ---------- | ----- | Я хотел бы вычислить меру дисперсии данных в столбце домашних животных (качественные данные), сгруппированные по group_id. Таким образом, результат будет (с использованием энтропией Шеннона с натуральным логарифмом, как наша метрика): | ---------- | ------------- | | group_id | pet_entropy | | ---------- | ------------- | | ааа | 1,03972 | | БББ | 0. 69315 | | ссс | 0 | | ---------- | ------------- | Кто-нибудь может предложить элегантный способ сделать это? Я знаю, что можно определить пользовательские функции агрегации, но я не могу получить мою голову вокруг, как достичь его для этого примера. Я также попытался с помощью scipy.stats.entropy функции, но это не похоже на работу на качественных данных. До сих пор я имею в виду использования энтропии Шеннона в моей дисперсии меры, хотя было бы очень интересно услышать о каких-либо других рекомендуемых показателях для дисперсии качественных данных.
annievic
1

голосов
0

ответ
209

Просмотры

Используйте панду принимать среднемесячные данные в файл .csv и сохранить на год в новом файле .csv

Python 3.6, Панды 0.22.0: Я импортировал CSV-файл с именем data.csv. Он содержит данные о погоде с колоннами «NAME», «ДАТА» «СНЕГ», который ссылается на название места, дату в формате / DD / YYYY MM, и количество снега в этот день. Я хочу, чтобы сгруппировать все строки по «NAME», а затем рассчитать среднемесячные «СНЕГ» поэтому выход отображает один ряд для «NAME», «ДАТА» (как единая ежемесячной запись), и «SNOW» со средним по месяц. Моя колонка «ДАТА» в формате даты и времени. Эти записи в течение многих лет 2016 и 2017. После того, как все группируется по среднемесячным снегопада, мне нужно сделать два новых .csv файлов на каждый год - 2016, 2017. Вот то, что я до сих пор: импорт панд как П.Д. импорт NumPy как нп DF = pd.read_csv ( 'data.csv', сентябрь = '' ) Df1 = df.loc [:, [ "NAME", "ДАТА", "снег"]] df1 [ "ДАТА"] = pd.to_datetime (df1.DATE) Дата [ 'ДАТА'] = df1.groupby (П.Д. .Grouper (ключ = 'ДАТА', частота = "М")). означает () df1.to_csv ( 'meansnow2017.csv', сентябрь = '', заголовок = True) В столбце "ДАТА" был первоначально объектом. Я не могу понять, как наслаивать эту GroupBy заявления таким образом, что имеет смысл. Это дает мне нужные заголовки столбцов, но не группа моей «ДАТА» в месяце или рассчитать свои средние. Любая помощь приветствуется!
Charlie
1

голосов
0

ответ
60

Просмотры

Заполнение столбца на основе предыдущего ряда с твист

Я борюсь с проблемой панды. У меня есть следующие данные. + -------- + ------ + --------- + --------- + ------------- + ------------- + -------------- + ------------ + ------- ------ + ------------ + ---------- + | символ | сторона | статус | origQty | executedQty | кол-во | availableQty | цена | boughtValue | soldValue | dcaLevel | + -------- + ------ + --------- + --------- + ------------- + ------------- + -------------- + ------------ + ------- ------ + ------------ + ---------- + | DGDBTC | КУПИТЬ | FILLED | 0,125 | 0.12500000 | 0.12500000 | 0.12500000 | 0.02000700 | 0.00250088 | | | | DGDBTC | КУПИТЬ | FILLED | 0,125 | 0.12500000 | 0.12500000 | 0.25000000 | 0.01960100 | 0.00245013 | | | | DGDBTC | ПРОДАТЬ | FILLED | 0,25 | 0.25000000 | -0,25000000 | 0.00000000 | 0.02005900 | | 0. 00501475 | | | DGDBTC | КУПИТЬ | FILLED | 0,113 | 0.11300000 | 0.11300000 | 0.11300000 | 0.02203000 | 0.00248939 | | | | DGDBTC | КУПИТЬ | FILLED | 0,113 | 0.11300000 | 0.11300000 | 0.22600000 | 0.02160300 | 0.00244114 | | | | DGDBTC | КУПИТЬ | EXPIRED | 0,226 | 0.00000000 | 0.00000000 | | 0.02125500 | | | | | DGDBTC | КУПИТЬ | ЧАСТИЧНОЕ | 0,226 | 0.15800000 | 0.15800000 | 0.38400000 | 0.02126100 | | | | | DGDBTC | ПРОДАТЬ | EXPIRED | 0,384 | 0.00000000 | 0.00000000 | | 0.02196600 | | | | | DGDBTC | ПРОДАТЬ | EXPIRED | 0,384 | 0.00000000 | 0.00000000 | | 0.02214300 | | | | | DGDBTC | ПРОДАТЬ | EXPIRED | 0,384 | 0. 00000000 | 0.00000000 | | 0.02189900 | | | | | DGDBTC | КУПИТЬ | FILLED | 0,384 | 0.38400000 | 0.38400000 | 0.76800000 | 0.02082900 | 0.00799834 | | | | DGDBTC | КУПИТЬ | FILLED | 0,768 | 0.76800000 | 0.76800000 | 1.53600000 | 0.01984300 | 0.01523942 | | | | DGDBTC | ПРОДАТЬ | EXPIRED | 1,536 | 0.00000000 | 0.00000000 | | 0.02074400 | | | | | DGDBTC | ПРОДАТЬ | EXPIRED | 1,536 | 0.00000000 | 0.00000000 | | 0.02094100 | | | | | DGDBTC | ПРОДАТЬ | EXPIRED | 1,536 | 0.00000000 | 0.00000000 | | 0.02076800 | | | | | DGDBTC | ПРОДАТЬ | ЧАСТИЧНОЕ | 1,536 | 0.30300000 | -0,30300000 | 1.23300000 | 0. 02065000 | | | | | DGDBTC | ПРОДАТЬ | FILLED | 1,233 | 1.23300000 | -1,23300000 | 0.00000000 | 0.02070000 | | 0.02552310 | | + -------- + ------ + --------- + --------- + ------------- + ------------- + -------------- + ------------ + ------- ------ + ------------ + ---------- + Это подмножество группы данных с помощью символа. Для каждого символа, я хочу, чтобы заполнить последний столбец со значением, которое соответствует следующим правилам: Каждый ордер на покупку (сторона = ПОКУПАТЬ) в серии имеет нулевое значение (0). Для каждого последовательного заказ на покупку значение увеличивается на единицу (1). Когда ордер на продажу (сторона = ПРОДАВАТЬ) достигается это знаменует собой новый Серию заказ на покупку. Строки со статусом просрочен пропускаются. Пример: + -------- + ------ + --------- + --------- + ------------- + ------------- + -------------- + ------------ + ------- ------ + ------------ + ---------- + | символ | сторона | статус | origQty | executedQty | кол-во | availableQty | цена | boughtValue | soldValue | dcaLevel | + -------- + ------ + --------- + --------- + ------------- + ------------- + -------------- + ------------ + ------- ------ + ------------ + ---------- + | DGDBTC | КУПИТЬ | FILLED | 0,125 | 0.12500000 | 0.12500000 | 0.12500000 | 0.02000700 | 0.00250088 | | 0 | | DGDBTC | КУПИТЬ | FILLED | 0,125 | 0.12500000 | 0.12500000 | 0.25000000 | 0.01960100 | 0.00245013 | | 1 | | DGDBTC | ПРОДАТЬ | FILLED | 0,25 | 0.25000000 | -0,25000000 | 0.00000000 | 0.02005900 | | 0.00501475 | | | DGDBTC | КУПИТЬ | FILLED | 0,113 | 0.11300000 | 0. 11300000 | 0.11300000 | 0.02203000 | 0.00248939 | | 0 | | DGDBTC | КУПИТЬ | FILLED | 0,113 | 0.11300000 | 0.11300000 | 0.22600000 | 0.02160300 | 0.00244114 | | 1 | | DGDBTC | КУПИТЬ | EXPIRED | 0,226 | 0.00000000 | 0.00000000 | | 0.02125500 | | | | | DGDBTC | КУПИТЬ | ЧАСТИЧНОЕ | 0,226 | 0.15800000 | 0.15800000 | 0.38400000 | 0.02126100 | | | 2 | | DGDBTC | ПРОДАТЬ | EXPIRED | 0,384 | 0.00000000 | 0.00000000 | | 0.02196600 | | | | | DGDBTC | ПРОДАТЬ | EXPIRED | 0,384 | 0.00000000 | 0.00000000 | | 0.02214300 | | | | | DGDBTC | ПРОДАТЬ | EXPIRED | 0,384 | 0.00000000 | 0.00000000 | | 0. 02189900 | | | | | DGDBTC | КУПИТЬ | FILLED | 0,384 | 0.38400000 | 0.38400000 | 0.76800000 | 0.02082900 | 0.00799834 | | 3 | | DGDBTC | КУПИТЬ | FILLED | 0,768 | 0.76800000 | 0.76800000 | 1.53600000 | 0.01984300 | 0.01523942 | | 4 | | DGDBTC | ПРОДАТЬ | EXPIRED | 1,536 | 0.00000000 | 0.00000000 | | 0.02074400 | | | | | DGDBTC | ПРОДАТЬ | EXPIRED | 1,536 | 0.00000000 | 0.00000000 | | 0.02094100 | | | | | DGDBTC | ПРОДАТЬ | EXPIRED | 1,536 | 0.00000000 | 0.00000000 | | 0.02076800 | | | | | DGDBTC | ПРОДАТЬ | ЧАСТИЧНОЕ | 1,536 | 0.30300000 | -0,30300000 | 1.23300000 | 0. 02065000 | | | | | DGDBTC | ПРОДАТЬ | FILLED | 1,233 | 1.23300000 | -1,23300000 | 0.00000000 | 0.02070000 | | 0.02552310 | | + -------- + ------ + --------- + --------- + ------------- + ------------- + -------------- + ------------ + ------- ------ + ------------ + ---------- + Я попытался следующие два способа. merged_df [ 'dcaLevel'] = merged_df [(merged_df [ 'сторона'] == 'ПОКУПАТЬ') и (merged_df [ 'Статус']. ISIN ([ 'ЗАПОЛНЕННЫЙ', 'ЧАСТИЧНАЯ']))]. GroupBy ([» . символ ']) [' dcaLevel '] применяются (лямбда х: x.shift (1) + 1) Таким образом, выдает ошибку. merged_df [ 'dcaLevel'] = merged_df [(merged_df [ 'сторона'] == 'ПОКУПАТЬ') и (merged_df [ 'Статус']. ISIN ([ 'ЗАПОЛНЕННЫЙ', 'ЧАСТИЧНАЯ']))]. GroupBy ([» символ ']) [' dcaLevel '] применить (лямбда-х.: 0, если x.shift (1) остальное x.shift (1) + 1) Я попробовал следующий альтернативный подход. symbol_df = merged_df.loc [merged_df [ 'символ'] == 'DGDBTC'] tmp_df = symbol_df [(symbol_df [ 'сторона'] == 'ПОКУПАТЬ') и (symbol_df [ 'Статус']. ISIN ([ 'ЗАПОЛНЕННЫЙ' , 'ЧАСТИЧНАЯ']))] tmp_df [ 'dcaLevel'] = np.where (tmp_df [ 'availableQty'] <tmp_df [ 'availableQty']. сдвиг (1), 0, tmp_df [ 'dcaLevel']. сдвиг (1 ) + 1) Он работает на некоторых строк, а не на других, и первый заказ на покупку в серии остается NaN. Я закодирован следующее, которое действительно работает, но я уверен, что есть более простой способ сделать это с пандами. merged_df [ 'dcaLevel'] = np.NaN сгруппированы = merged_df [merged_df [ 'статус']. ISIN ([ 'ЗАПОЛНЕННЫЙ', 'ЧАСТИЧНАЯ'])]. GroupBy ([ 'символ']) col_idx = merged_df.columns.get_loc (»
nidkil
1

голосов
1

ответ
23

Просмотры

панды: Используя встроенные и настроенное функцию агрегации вместе?

Я использовал следующий код:. S = df.groupby ( 'версия') AGG ({ 'Продолжительность': [ 'средний', 'станд'], 'ц': [ 'мин', 'макс']). Reset_index () s.columns = s.columns.map ( "_". присоединиться) результаты работы отлично. Тогда я попытался добавить еще одну агрегатную функцию квантиль (+0,25) s = df.groupby ( 'версия') AGG ({ 'длительность':. [ 'Средний', 'STD', квантилей (+0,25)], 'ц ': [' мин, 'макс']}) reset_index () s.columns = s.columns.map ( "_" присоединиться) Тогда получим следующее сообщение об ошибке:.. NameError Traceback (самый последний вызов последнего) в () ----> 1 с = df.groupby ( 'версия') AGG ({ 'продолжительность':. [ 'средний', 'станд', квантиль (+0,25)], 'ц': [ 'мин',» макс ']}). reset_index () 2 s.columns = s.columns.map ( "_". присоединиться) 3 s NameError: имя «квантиль» не определено, что было бы правильным способом достижения этой цели? Спасибо!
Edamame
1

голосов
0

ответ
42

Просмотры

Flag column if row within a time period of a previous row

I have a dataframe (300 million rows) that includes patient's initial hospital stays as well as any readmits for that patient. I need to identify the readmits. The dataframe is grouped by patient ids (Key) and sorted by Key then 'admit' date ascending. There are two conditions to identify a readmit: First condition - Num1 for the row being tested must be a value between 10-15. Second Condition - the admit date of the row must fall between the discharge and 90DayPostDischarge date of a previous row. The caveat to the second rule is that there could be multiple initial hospital stays for a patient. These initial stays would be identified by being separated by more than 90 days from the initial stay. An example of this situation is in the results for Key 10003: index 0 and 2 are both initial hospital stays. df = pd.DataFrame({'Key': ['10003', '10003', '10003', '10003', '10003','10034','10034', '10034'], 'Num1': [13,13,13,13,13,13,16,13], 'Num2': [121,122,122,124,125,126,127,128], 'admit': [20120506, 20120511, 20121010,20121015,20121020,20120510,20120516,20120520], 'discharge': [20120510, 20120515, 20121012,20121016,20121023,20120515,20120518,20120522]}) df['admit'] = pd.to_datetime(df['admit'], format='%Y%m%d') df['discharge'] = pd.to_datetime(df['discharge'], format='%Y%m%d') df['90DayPostDischarge'] = df['discharge'] + timedelta(days=90) df Initial df: Key Num1 Num2 admit discharge 90DayPostDischarge 0 10003 13 121 2012-05-06 2012-05-10 2012-08-08 1 10003 13 122 2012-05-11 2012-05-15 2012-08-13 2 10003 13 122 2012-10-10 2012-10-12 2013-01-10 3 10003 13 124 2012-10-15 2012-10-16 2013-01-14 4 10003 13 125 2012-10-20 2012-10-23 2013-01-21 5 10034 13 126 2012-05-10 2012-05-15 2012-08-13 6 10034 16 127 2012-05-16 2012-05-18 2012-08-16 7 10034 13 128 2012-05-20 2012-05-22 2012-08-20 Final Result: Key Num1 Num2 admit discharge 90DayPostDischarge Readmit 0 10003 13 121 2012-05-06 2012-05-10 2012-08-08 0 #the first row of every group will be false(0) as it cannot be compared to the previous rows 1 10003 13 122 2012-05-11 2012-05-15 2012-08-13 1 #this qualifies as a readmit to the previous row 2 10003 13 122 2012-10-10 2012-10-12 2013-01-10 0 #this is the same patient but because this row is outside of the previous date ranges, it will be considered a new initial stay 3 10003 13 124 2012-10-15 2012-10-16 2013-01-14 1 #this will be flagged as a readmit to the previous row 4 10003 13 125 2012-10-20 2012-10-23 2013-01-21 1 #this too will be a readmit FOR THE INITIAL STAY AT INDEX 2 5 10034 13 126 2012-05-10 2012-05-15 2012-08-13 0 #the first row of every group will be false(0) as it cannot be compared to the previous rows 6 10034 16 127 2012-05-16 2012-05-18 2012-08-16 0 #this row has a num1 value that is out of the range of 10-15 so it will be flagged as false(0) 7 10034 13 128 2012-05-20 2012-05-22 2012-08-20 1 #this will be flagged as true(1) because of index 5 My attempt: I first remove all rows that don't qualify based on the first condition (I realize that making a new df is probably not the best approach. Working on fixing this). Second I attempt to flag rows that may fall into the 2nd condition, however my code is just returning a single value of 'true' and not a df with the flagged column. I'm having a brain fart this approach. Any help would be greatly appreciated. df2 = df[df['Num1'].isin([10,11,12,13,14,15])] df2 = df.loc[((df['admit'] > df['discharge'].shift(1)) & \ (df['admit']
Martin Bobak
1

голосов
0

ответ
132

Просмотры

Панды сплит-применить-комбайн, почему в сочетании с pd.concat ([DF]) работает при сортировке?

Я делаю вид разделенного применить-слияние документооборота с пандами. «Применить» часть возвращает DataFrame. Когда DataFrame я бегу gropupby на сначала сортируют, просто возвращает DataFrame от применять поднимает ValueError: не может проиндексировать от дубликата оси. Вместо этого, я нашел, что это работает должным образом, когда я вернусь pd.concat ([DF]) (вместо того, чтобы просто вернуть ФР). Если я не сортировать DataFrame, оба способа объединения результатов работы правильно. Я ожидаю, что сортировка должна делать что-то для индекса все же я не понимаю, что. Может кто-то объяснить? импорт панды как П.Д. импорта NumPy как нп четкости fill_out_ids (Д.Ф., filling_function, сортировки = False, sort_col = 'sort_col', group_by = 'group_col', to_fill = [ 'id1', 'id2']): ДФ = df.copy ( ) df.set_index (group_by, Inplace = True), если сортировать по: ДФ.
Fred
1

голосов
3

ответ
66

Просмотры

Как я группировать по дате с пандой?

Я сделал игру и получил данные всех игроков, как это: время_запуска Id Место Результат 2018-04-24 08: 46: 35,684000 ааа 1 280 2018-04-24 23: 54: 47,742000 ГЭБ 2 176 2018-04-25 15:28 : 36.050000 ссс 1 223 2018-04-25 00: 13: 00,120000 ааа 4 79 2018-04-26 04: 59: 36,464000 ддд 1 346 2018-04-26 06: 01: 17,728000 FFF 2 157 2018-04-27 04 : 57: 37,701000 ггг 4 78, но я хочу, чтобы сгруппировать это днем, так же, как это: Дата 2018/4/24 2018/4/25 2018/4/26 2018/4/27 ID ааа ссс ддд ггг ГЭБ ааа FFF NaN как I группу по дате с пандой?
Alex Ran
1

голосов
1

ответ
597

Просмотры

Group by Column in Dataframe and create seperate csv for all the group

У меня есть огромный CSV файл 100kb, который содержит записи. Пример, как ниже города сотрудник калифорния Jhon дели Кумар нас Радж калифорния разъединителей нас kroja ... Так что я хочу, чтобы сгруппировать их и хранить в отдельном CSV файл Мой выходной результат на приведенном выше примере будет город работник калифорния Jhon калифорнийские разъединителей дели Кумар нас Радж нас kroja должен ли я люблю сортировку / группирование по городу в кадре данных, а затем иметь цикл и перебирать весь кадр данных? И она мой код New_data = pd.read_csv ( "citynames.csv" кодирование = "ISO-8859-1") Aftergrouping_data = New_data.groupby ( "город") #print (Aftergrouping_data.groups) для имени группы в Aftergrouping_data : печать (имя) group.to_csv ( "aftergrouping.csv" .format (имя), Индекс = False) Проблема заключается в его переопределение значения в течение цикла и отображает последние данные группы. но я хочу, чтобы все сгруппированные данные в файле. Заранее спасибо
lava kumar
1

голосов
1

ответ
52

Просмотры

Панды DataFrame Расширенного индексирование

I am looking for some help with pandas DataFrame sorting. I have a Data frame of 8 columns that go like; ['Date' , 'S ID', 'Se ID', 'S #', 'File Size (Mb)', 'HD name', 'Start Time', 'End time'] I've then done a: DataFile.groupby(['HD Name','Date','Se ID','S ID'])['File Size (Mb)'].agg({'Sequence #':'count','File Size (Mb)':'sum'}).reset_index().rename(columns={'Sequence #':'# of Files'}) which takes my data and groups it by the matching grouby() parameters and sums the file sizes. I would like to add two columns on to this which holds the first 'Start Time' and last 'End Time' how would I go about doing that? I'm thinking my only option may be to loop over the data or create a duplicate dataframe to et start and end times of grouped data. Any ideas would be appreciated! Example dataframe: 'Hard Drive Name' : [H5 , H5 , H5 , H5 , H5] 'S ID' : [LA , LA , LA , SD , SD] 'Se ID' : [1200, 1200, 1200, 30, 30] 'Date' : ['10/01/2018' , '10/01/2018' , '10/01/2018' , '09/03/2018' , '09/03/2018'] '#' : [1 , 2 , 3 , 1 , 2] 'Start Time' : [[08:09:54] , [08:58:31] , [09:39:38] , [05:04:13] , [05:41:13] ] 'End Time' : [[08:28:54] , [09:17:31] , [09:58:38] , [05:23:12] , [06:00:12]] {'Date': {34: '10/01/2018', 35: '10/01/2018', 36: '10/01/2018', 37: '10/01/2018', 38: '10/01/2018', 39: '10/01/2018', 40: '10/01/2018', 41: '10/01/2018', 42: '10/01/2018', 661: '09/03/2018'}, 'End Time': {34: ['08:28:54'], 35: ['09:17:31'], 36: ['09:58:38'], 37: ['10:37:41'], 38: ['11:21:32'], 39: ['12:04:42'], 40: ['12:45:31'], 41: ['13:25:23'], 42: ['14:04:03'], 661: ['05:53:36']}, 'File Size (Mb)': {34: 1074.256284, 35: 1074.842244, 36: 1074.759444, 37: 1074.836956, 38: 1074.516156, 39: 1074.547044, 40: 1074.8363, 41: 1074.891492, 42: 1074.792068, 661: 1074.428204}, 'Hard Drive Name': {34: 'H5', 35: 'H5', 36: 'H5', 37: 'H5', 38: 'H5', 39: 'H5', 40: 'H5', 41: 'H5', 42: 'H5', 661: 'H5'}, 'Sensor ID': {34: '1207', 35: '1207', 36: '1207', 37: '1207', 38: '1207', 39: '1207', 40: '1207', 41: '1207', 42: '1207', 661: '1207'}, 'Sequence #': {34: 's005', 35: 's006', 36: 's007', 37: 's008', 38: 's009', 39: 's010', 40: 's011', 41: 's012', 42: 's013', 661: 's000'}, 'Site ID': {34: 'SD', 35: 'SD', 36: 'SD', 37: 'SD', 38: 'SD', 39: 'SD', 40: 'SD', 41: 'SD', 42: 'SD', 661: 'SDO'}, 'Start Time': {34: ['08:09:54'], 35: ['08:58:31'], 36: ['09:39:38'], 37: ['10:18:41'], 38: ['11:02:32'], 39: ['11:45:42'], 40: ['12:26:31'], 41: ['13:06:23'], 42: ['13:45:03'], 661: ['05:34:37']}}
Logan Voorneman
1

голосов
1

ответ
48

Просмотры

Как использовать комбинацию значений столбцов для фильтрации данных и создания подмножества?

Я новичок в Python и хотели бы получить помощь в расширении проекта я работаю. У меня есть набор данных с 25 колоннами. Мне нужно фильтровать эти данные с помощью уникальных комбинаций из 3 отдельных столбцов. Затем название каждого из уникальных фильтров как подмножество (предпочтительно только со списком значений в каждом из 3-х столбцов). Итак, у меня есть код, чтобы найти уникальные комбинации всего трех колонок, что мне нужно. Я подумал, что было бы хорошим началом. Уникальный = m_nlsn [[ 'Market Разрыв', 'Демографический', 'Воспроизведение Период']]. drop_duplicates (подмножество = [ 'Market Разрыв', 'Демографический', 'Воспроизведение Период']) Теперь мне нужно знать, как я могу использовать эти уникальные комбинации для фильтрации и имя подмножество? Например, если у меня есть 10 уникальных комбинаций, я хочу 10 различных подмножеств на основе значений в этих 3-х отдельных столбцах. Ниже я фильтрация уникальных комбинаций РУЧНОЙ. comp_hh_live = m_nlsn.loc [(m_nlsn [ 'Market Перерыв'] == "Композит") и (m_nlsn [ 'Демографическая'] == "Бытовой") & (m_nlsn [ 'Период Playback'] == «Live | TV с цифровой | Linear с VOD ")] Вся помощь очень ценится.
SoSincere3
1

голосов
1

ответ
96

Просмотры

Панды - GroupBy - get_group с интервалом / диапазон дат

Я пытаюсь использовать диапазон интервала / даты с помощью метода get_group (). Диапазоны = pd.date_range (пуск = '1 / 1/1900', периоды = 12, частота = '120M') = даты df.groupby (pd.cut (DF [ 'д.р.'], диапазоны)) Я обычно знаю, что вы можно использовать dates.get_group ( 'Groupname'). Тем не менее, поскольку я использую диапазон дат, я не могу заставить его работать. Можно ли использовать get_group () с диапазоном дат / интервалом? Если да, то что такое правильный синтаксис? Моя цель состоит в том, чтобы быть в состоянии выбрать dataframe из определенной группы. Может быть, есть другой способ? Спасибо! Образец данных: https://drive.google.com/file/d/1sA_EdrBAVuNCcUQRjj09wmaSCUgiAeif/view?usp=sharing
csf
1

голосов
1

ответ
41

Просмотры

Панды Top п% сгруппированных суммы

Я работаю в компании, и я пытаюсь вычислить ведьмами продукты производства топ 80% выручки Gross в разные годы. Вот краткий пример моих данных: Part_no Редакция Gross_Revenue 1 год 1 2014 2 2 2014 3 с 2 2014 4 с 2 2014 5 d 2 2014 я просматривал различные ответы и здесь лучший код, который я могу придумать с, но он не работает: df1 = ДФ [[ 'Год', 'Part_No', 'Версия', 'Gross_Revenue']] df1 = df1.groupby ([ 'Год', 'Part_No', 'Revision']). AGG ({ 'Gross_Revenue': 'сумма'}) # печати (df1.head ()) а = 0,8 df2 = (df1.sort_values ​​( 'Gross_Revenue', восходящие = False) .groupby ([» Год», 'Part_No', 'Версия'], group_keys = Ложный) .На (лямбда х: x.head (интермедиат (Len (х) * а))) .reset_index (падение = True)) печать (df2) I пытаюсь иметь код возврата, за каждый год, все лучшие продукты, которые принесли 80% дохода нашей компании. Я подозреваю, что это старое правило 80/20. Спасибо за вашу помощь, меня
SDS
1

голосов
1

ответ
802

Просмотры

How do I sum unique values per column in Python? [duplicate]

Этот вопрос уже есть ответ здесь: Получить статистику для каждой группы (таких как подсчет, средний и т.д.) с помощью панда GroupBy? 5 ответов я работаю с блогами и есть данные, содержащие ACCOUNT_ID и session_id. Несколько сессии могут быть связаны с одной учетной записью. Я хочу, чтобы создать новый dataframe содержащего ACCOUNT_ID и подсчитать количество уникальных сеансов, связанные с этим аккаунтом. Моя ДФ выглядит следующим образом: account_id session_id 1111 de322 1111 de322 1111 de322 1111 de323 1111 de323 0210 ge012 0210 ge013 0211 ge330 0213 ge333 Я использую этот код: new_df = df.groupby ([ 'account_id', 'session_id']). сумма () выход я получаю ниже:
Tadas Melnikas
1

голосов
1

ответ
50

Просмотры

Панды: количество событий с момента последнего выигрыша в ид

Это пример моего набора данных, который об онлайн-играх. У нас есть идентификатор сессии квалификационной ставку, дата, когда произошла ставка и результат ставки (обоюдная ничья беспроигрышная): е = { «сессии»: [ «1», «3», «1», ' 1' , '3', '1', '2', '2', '1', '3', '3', '3', '3', '3', '2', '3' , '3'], 'дата': [ '2018-01-01 00:17:05', '2018-01-01 00:30:35', '2018-01-01 00:19:05', '2018-01-03 00:55:22', '2018-01-01 00:21:07', '2018-01-01 00:22:09', «2018-02-01 00:35:22 ' '2018-01-01 00:22:17', '2018-01-01 00:25:11', '2018-01-01 00:27:28',' 2018-01-01 00:29 : 29' , «2018-01-01 00:25: 22 начертить Моя цель состоит в том, чтобы рассчитывать на каждой сессии максимальное количество игр произошло без победы. Это то, что я сделал, следуя советам из этого SO сообщение: 1.First, я создал колонку, в которой выигрыш = 1, а остальные значения = 0 т = { «выиграть»: 1, «потери»: 0, «рисовать ': 0} df2 [' status_num '] = df2.status.map (м) дата сеанса статус status_num 0 1 2018-01-01 00:17:05 выиграть 1 1 1 2018-01-01 00:19:05 потери 0 2 1 2018-01-01 00:22:09 победа 1 3 1 2018-01-01 00:25:11 выиграть 1 4 1 2018-01-03 00:55:22 вничью 0 2.Для каждого сеанса, я вычислить дни после последней победы, а затем добавить результат к новому dataframe: #create список сессий PLIST = список (df2.session.unique ()) = окончательная pd.DataFrame () для я в PLIST: #slice Набор данных на сессии Sess = df2. и у меня есть большой набор данных, я хотел бы найти лучшее решение с точки зрения времени работы. я совершенно уверен, что узкое место является цикл, а также тот факт, что для каждой итерации я делаю GroupBy, но на самом деле я не могу думать иначе. Я также попытался подход, предложенный здесь, но я не заинтересован в днях.
EAMC
1

голосов
2

ответ
41

Просмотры

Как сгруппировать столбец даты в год и просуммировать столбец расходов в зависимости от года?

Я пытаюсь группировать свои данные лет и суммировать расходы в зависимости от года они принадлежат. Вот образец данных: дата: spend_amt: 2/1/2014 10000 2/5/2014 98 1/2/2015 5834,2 7/8/2017 561236 9/3/2017 568 28/1/2016 989895,3 Мой текущий код Защиту yearlySpending (само):.. dfspendingYearly = pd.DataFrame () dfspendingYearly = self.dfGov.groupby ([ "дата"]) [ 'spend_amt'] AGG ( 'сумма') dfspendingYearly.groupby (dfspendingYearly [ "дата"] дт. . год) [ 'spend_amt'] AGG ([ 'сумма']) Я получил сообщение об ошибке 'KeyError:' дата' Желаемая дата вывода: spend_amt: 10098 2015 2014 5834,2 2016 989895,3 2017 561804
justalazyguy
1

голосов
1

ответ
74

Просмотры

python grouping and transpose

567' , '232', '453'], "Категория": [ 'Electrical', 'Электрооборудование', 'Оборудование', 'Дом', 'Электрооборудование', 'Автомобиль', 'Дом', 'Игрушка',» не дом»,„Bike123“]}) Теперь мне нужно группе Клиента нет и получить полную сумму, категории Top 1,2,3 и их процент от общего количества. Примечание: В моем Игрушечный набор данных, у меня есть только две категории, в моей исходных данных я больше, мне нужно выбрать топ 5 категорий. Мой Dataframe должен выглядеть следующим образом: DF = pd.DataFrame ({ "Customer_no": [ '1', '1', '1', '2', '2', '6', '7', '8' , '9', '10'], "Card_no": [ '111', '222', '333', '444', '555', '666', '777', '888',» Примечание: 1) Верхняя Категория выбираются Группировка все Категории против каждого клиента и суммируя количество для каждой категории клиента мудро. Который когда-либо категория имеет большее количество ее Top 1 категории, так же следующий один Top 2 и так далее 2) Топ процент 1 категория: Сво Общая сумма каждой категории делится на общее количество и умножается на 100. Это для каждого клиента. Аналогично для Top 2 категории.
Sheriff
1

голосов
1

ответ
51

Просмотры

Получить количество дат группы в DataFrame

Дата Широта Долгота Disaster 2011-01-10 56,79 89,90 Вихревой Flood 2011-02-09 56,79 89,90 Вихревой Flood 2010-11-20 34,08 69,92 Вихревой Flood 2011-01-10 56,79 89,90 Землетрясение 2010-12-19 67,78 155,35 Earthqauke 2010-12 -19 66,78 125,35 Вихревой Flood 2010-12-19 66,78 125,35 Earthqauke 2017-09-10 56,99 98,22 Вихревой Flood 2017-09-10 56,99 98,22 Вихревой Потоп Дата столбец даты и типа я новичок временного ряда проблем, связанных которых является поэтому вызывает у меня некоторые проблемы с задачей, в котором мне нужно первое, группа по широте и долготе, а затем подсчитать, сколько дней (даты) были где землетрясения произошли в регионе. Я попытался с помощью - merged_df = pd.DataFrame (df.groupby ([ 'Широта', 'Долгота']) [ 'Disaster'].
Basileus
1

голосов
2

ответ
33

Просмотры

How to add new columns at the end of a dataframe that contains hourly mean values and corresponding number of counts for each mean value per hour.

I have been searching a lot but could not find an answer to my problem. I have solar cells measurement data. The data has a timestamp value but no frequency. The number of values in an hour is not constant. Any number of values can occur in an hour. So i am struggling to create: i. A column with Hourly averages of the data. ii. Another column that holds number of counts of measurements that occured in each hour. This is important since my timestamp has no fix frequency. So it is important to know whether the mean calculated for a particular hour of the day has 1 or 2 or 14 measurements for example. My dataframe image: My code: yr=df.index.year mon=df.index.month day= df.index.day hr = df.index.hour df.groupby([yr, mon, day, hr])['KP_sensor'].mean() How do i add two columns at the end of this dataframe (Mean column and Number of counts of measurements occured in that hour).
Moh
1

голосов
1

ответ
39

Просмотры

Панды: добавление столбца с возможностью поворота и фильтрации

Я начиная с середины входных данных outid Выбранные Target_vol 201711 16942098 После 12 201712 16942102 После 14 20176 1389276 До 16 20177 1389277 Перед 0 и т.д., около 37K строк. Мне нужен стержень, который принимает только строки с «Selected» = «Перед», где Подписать столбцы = «середина», меток строк = «outid», сумма значений - сумма «Target_vol». Я использую код в Python:.. Df.groupby ([ 'outid', 'середина']) [[ 'Target_vol']] сумма () reset_index () стержень (индекс = 'outid', столбцы = 'середина'. , значения = «Target_vol»). reset_index () вопрос заключается в том, чтобы добавить фильтр, например «Selected» = «Перед» (или «После», или без пробелов). Тогда мне нужно вставить столбец «объем продаж Target, где я могу суммировать продажи („“Target_vol
Spleen
1

голосов
1

ответ
25

Просмотры

Is there a groupby function that can make a new dataframe from names up to a underscore?

I am trying to set up a script in pandas that can help me sort some data, i am working on how to do it, this is how far i have managed to come. This is my first attempt at pandas. My idea is: have a csv with 4 colums: 1 with name and 3 with data. I want to group the data based on the name, the names will always have a underscore + a incrasing number at the end, and it will be diffrent. I have yet to find out how to code it, so now im trying to break the data by simmilar characters. Here is my code: import pandas as pd import matplotlib.pyplot as plt from matplotlib import style df = pd.read_csv("C:\Python27\Projects\Pandas\csv_testing\csvtesty.csv",header=None,names=['names','x','y','z','code']) #df.set_index('names',inplace=True) g = (df.groupby(['names', df.names.str[:3]])) for names, names_df in g: print(names) print(names_df) Sample of my csv: e3_30,3232.77,652478.1833,112.100,10272 e3_31,3232.78,652478.1834,112.101,10471 e3_32,3232.79,652478.1835,112.102,10670 dawn21_1,3232.70,652478.1826,112.093,10869 dawn21_2,3232.78,652478.1834,112.101,11068 dawn21_3,3232.86,652478.1842,112.109,11267 dawn21_4,3232.94,652478.1850,112.117,11466 dawn21_5,3232.102,652478.1858,112.125,11665 I was trying to ge it to seperate them into dataframes with simmilar names. Part of my output: names x y z code 0 d1_1 3232.27 652478.07 112.05 123 names x y z code 9 d1_10 3232.4 652478.464 112.063 1914 names x y z code 10 d1_11 3232.42 652478.577 112.065 2113 names x y z code 11 d1_12 3232.44 652478.69 112.067 2312 names x y z code 12 d1_13 3232.46 652478.803 112.069 2511 names x y z code 13 d1_14 3232.48 652478.916 112.071 2710 names x y z code 14 d1_15 3232.5 652478.1029 112.073 2909 names x y z code 15 d1_16 3232.52 652478.1142 112.075 3108 names x y z code 16 d1_17 3232.54 652478.1255 112.077 3307 names x y z code 17 d1_18 3232.56 652478.1368 112.079 3506 names x y z code 18 d1_19 3232.58 652478.1481 112.081 3705 names x y z code 1 d1_2 3232.28 652478.08 112.051 322 names x y z code 19 d1_20 3232.6 652478.1594 112.083 3904 names x y z code 20 d1_21 3232.62 652478.1707 112.085 4103 names x y z code 21 d1_22 3232.64 652478.182 112.087 4302 names x y z code 2 d1_3 3232.29 652478.09 112.052 521 names x y z code 3 d1_4 3232.3 652478.1 112.053 720 names x y z code 4 d1_5 3232.31 652478.11 112.054 919 names x y z code 5 d1_6 3232.32 652478.12 112.055 1118 names x y z code 6 d1_7 3232.34 652478.125 112.057 1317 names x y z code 7 d1_8 3232.36 652478.238 112.059 1516 All the examples i can find have diffrent names in the colum they want it to separete them by. Some help or pointers would help me alot thx.
Tom
1

голосов
1

ответ
35

Просмотры

Создать новый столбец в Python в группе

Мне нужно создать новую переменную, показанную по мере необходимости в оснастке, приведенной ниже в Spyder. Я получаю сообщение об ошибке. пожалуйста, дайте решение. введите описание изображения здесь Заранее спасибо !!!!
Ankur Singh
1

голосов
1

ответ
47

Просмотры

Условно фильтр, используя несколько столбцов, если условие в другом столбце выполняется с использованием метода GroupBy

ID YEART Commdate Кошка Категория EarliestD 0 LVI6AE2 1993 2017-03-24 LVI6AE2_1 56 NaT 1 LVI6BE2 1994 2017-03-24 LVI6BE2_1 67 NaT 2 APJ5LEV 1975 2017-03-13 APJ5LEV_1 78 NaT 3 LQL0AE3 1986 2017-03-16 LQL0AE3_1 87 NaT 4 BLR3UEV 1982 2017-03-15 BLR3UEV_1 90 NaT Вопрос; 1.Is можно условно GroupBy используя несколько столбцов, если условие в другом столбце встречается? Если это возможно, как? 2. Можно ли назвать несколько условие GroupBy в функцию четкости? Спасибо Можно назвать несколько условие GroupBy в функцию четкости? Спасибо Можно назвать несколько условие GroupBy в функцию четкости? Спасибо Можно назвать несколько условие GroupBy в функцию четкости? Спасибо Можно назвать несколько условие GroupBy в функцию четкости? Спасибо
wwnde
1

голосов
1

ответ
20

Просмотры

Панды: Проблема с агрегацией периодами двух месяцев

Я хочу, чтобы агрегировать данные по периодам двух месяцев с использованием метода GroupBy панд. И я не могу достичь exepected результатов. Действительно у меня есть данные, что занимает 4 месяца. Поэтому я хочу два периода: первый между 2018-06-01 и 2018-07-31 и Seconde один между 2018-08-01 и 2018-09-30. Ниже в коде, вы увидите полученные и ожидаемые результаты. Не могли бы вы помочь мне об этом? Заранее спасибо ! данные # выборки данных = { 'А': pd.to_datetime ([ '2018-06-01', '2018-06-15', '2018-07-01', '2018-07-15', '2018- 08-01' , '2018-08-15', '2018-09-01', '2018-09-15', '2018-09-30']), 'В': [1,1,1, 1,1,1,1,1,1]} тест #create dataframe = pd.DataFrame.from_dict (данные) #aggregation данных по периодам двух месяцев test.groupby (pd.Grouper ( 'A' ключ =,
Haennor
1

голосов
1

ответ
41

Просмотры

PANDAS - правильно делают вложенную GroupBy более одного столбца (пару столбцов сделать уникальный идентификатор)

Просьба игнорировать обильное количество столбцов, это было гораздо проще скопировать и вставить мой текущий пример. Проблема под руку: четыре из приведенных ниже столбцов, в комбинации, мои уникальные идентификаторы подряд. Эти столбцы param01, param02, param03, param04. Я хочу, чтобы иметь возможность наблюдать, как все остальные столбцы изменяются в зависимости от param04 в то время как я выбираю уникальное сочетание param01, param02, param03. А именно, если комбинация param01, param02, param03 соответствуют более чем одной записи param04, я хочу, чтобы сохранить этот результат. В идеале к концу результата, я хочу таблицу / datafram сводится к одному с этим уникальным сочетанием param01, param02, param03, который имеет более чем одну запись param04. В конце концов, чтобы построить какие-либо из других столбцов в зависимости от изменения param04 для конкретной комбинации другого Params. Я'
Oru
1

голосов
2

ответ
38

Просмотры

Как для сравнения значений двух строк [закрыт]

Как выбрать строки, которые имеют столбец [НБР] содержит различные значения. Может быть, что некоторые [st_id] есть только одна запись. st_id TRC реж NBR 88900 4009114 1 2 88900 4009114 2 2 88000 4009115 1 2 88000 4009115 2 2 88300 4009113 1 3 88300 4009113 2 2 88400 4009110 1 4 88500 5120012 1 1 88500 5120013 2 2 88600 1270081 1 3 Результат: st_id TRC реж NBR +88300 4009113 1 3 88300 4009113 2 2 88500 5120012 1 1 88500 5120013 2 2
xfiles adilovic
1

голосов
2

ответ
29

Просмотры

python access a column after groupby

Я хотел бы заменить нулевое значение посещаемости стадиона (достаток на французском языке) с их помощью. Поэтому я делаю это, чтобы иметь среднее значение по сезонам / команд: тест = data.groupby ([ «сезона», «домициль»]) AGG ({ «достаток»: «средний»}). Этот код работает и дать мне то, что я хотят (данные dataframe): достаток сезон домицилий 1999 Монако 10258.647059 Сент-Этьен 27583.375000 ФК Нант +28334,705882 Бордо 30084,941176 Монпелье +13869,312500 Olympique Lyonnais 35453,941176 Олимпик +51686,176471 Пари Сен-Жермен 42792,647059 Страсбур 19845,058824 Ренн 13196.812500 2000 Монако 8917.937500 Сент-Этьен 26508. 750000 EA Guingamp 13056,058824 FC Nantes 31913,235294 Бордо +29371,588235 LOSC 16793,411765 Olympique Lyonnais 34564,529412 Олимпик 50755,176471 Пари Сен-Жермен +42716,823529 Страсбур 13664,875000 Ренн +19264,062500 Toulouse FC +19926,294118 .... Так что теперь я хотел бы сделать состояние на сезон и команда. Например, тест [test.season == 1999]. Однако это не работает, потому что у меня есть только один столбец «достаток». Это дает мне ошибку: объект «DataFrame» не имеет атрибута «сезона» я пытался:. Тест = данные [[ «сезона», «местожительства», «достаток»]] GroupBy ([ «сезона», «места жительства»]) .agg ({ 'достаток': 'средний' }) Какие результаты, как указано выше. Так что я подумал, может быть, индексирование сезона / команды, но как? И после того, как я к нему доступ? Спасибо
Tiboo
1

голосов
1

ответ
22

Просмотры

Rolling for 720minutes on pandas dataframe

У меня есть набор данных, как показано ниже. Идея смотрит на каждых предыдущих 720 минутах не частоты, которые мы используем в функции морского окуня. Я хочу, чтобы увидеть количество положительных изменений в предыдущие 720 минут. Это на самом деле не подсчитать сумму положительных для 720minutes. Строка Отметка Направление Положительный отр Гайка 1 1/20/19 12:15 2 1/20/19 12:17 Гайка 3 1/20/19 12:17 отр 4 1/20/19 12:18 отр 5 1/20 / 19 12:19 Позы 6 1/20/19 12:20 отр-1/20/19 12:21 отр-1/20/19 12:22 Позы 9 1/20/19 12:23 отр 10 1/20 / 19 12:24 Поз 11 1/20/19 12:25 отр 12 1/20/19 12:26 отр 13 1/20/19 12:27 отр 14 1/20/19 12:29 отр 15 1/20 / 19 12:29 Гайка 720 1/20/19 12:30 Позы 230 (O2: o720) 284 205 721 1/20/19 12:31 Гайка 230 (O3: o721) 284 206 Таким образом, я делаю = COUNTIF (направление 2: Direction721, "Pos") в Excel для вычисления положительного столба. Код я пытался работать на 60minutes и 15 минут, но когда я использую 720 минут, что является 12 часов, я не получаю положительные, отсчеты NEG, как я хотел. Это дает мне счетчик 0, 1 и так далее, что является совершенно неправильным. Код пробовал: COLS = D [ 'ChangeDirection'] dropna () уникальный () для с в перевалы:.... Df [C] = D [ 'ChangeDirection'] экв (с) .rolling ( '720min') сумму ( ) df.loc [: df.index [0] + pd.Timedelta (720 * 60, единица = "s"), смещ_по_столбцы] = np.nan нег считает как я хотел. Это дает мне счетчик 0, 1 и так далее, что является совершенно неправильным. Код пробовал: COLS = D [ 'ChangeDirection'] dropna () уникальный () для с в перевалы:.... Df [C] = D [ 'ChangeDirection'] экв (с) .rolling ( '720min') сумму ( ) df.loc [: df.index [0] + pd.Timedelta (720 * 60, единица = "s"), смещ_по_столбцы] = np.nan нег считает как я хотел. Это дает мне счетчик 0, 1 и так далее, что является совершенно неправильным. Код пробовал: COLS = D [ 'ChangeDirection'] dropna () уникальный () для с в перевалы:.... Df [C] = D [ 'ChangeDirection'] экв (с) .rolling ( '720min') сумму ( ) df.loc [: df.index [0] + pd.Timedelta (720 * 60, единица = "s"), смещ_по_столбцы] = np.nan
KSp
1

голосов
1

ответ
39

Просмотры

Pandas line plot with markers based on another column

У меня есть dataframe как следующий ДФ: Ind группа людей ценят value_50 1 1 5 100 1 1 2 2 90 1 2 1 10 80 1 2 2 20 40 0 ​​3 1 7 10 0 3 2 23 30 0 И я пытался повернуть их, чтобы увидеть отдельные показатели «группа» в столбцах ДФ = data.pivot_table (индекс = data.ind, столбцы = [ «группа»], значения = [ «люди», «значение», «value_50»]) ДФ А затем попытался участок «значение» для обеих групп отдельно с «Ind» по оси х df.plot (), но я не хочу, чтобы включить все столбцы в графике, а я пытаюсь цвета маркера на основе ф.р. [ «value_50»] и размера пузырь или маркер размера на основе ДФ [ «людей»], как с и з paramteres соответственно. Это поможет выявить определенные точки на графике ф.р. [ «значения»].
Manu Sharma
1

голосов
2

ответ
34

Просмотры

Get cumulative sum Pandas conditional on other column

Я хочу, чтобы создать столбец, который показывает совокупное количество (сумма) качения предыдущих покупок (на одного клиента), которые имели место в отделе 99 Мой кадра данных выглядит следующим образом; где каждая строка представляет собой отдельную транзакцию. Идентификатор цепи отдела категории компании Дата бренда productsize productmeasure purchasequantity purchaseamount продажа 0 86246 205 7 707 1078778070 12564 2012-03-02 12,00 OZ 1 7,59 268,90 1 86246 205 63 6319 107654575 17876 2012-03-02 64,00 OZ 1,59 268,90 1 2 86246 205 97 9753 1022027929 0 2012-03-02 1.00 КТ 1 5,99 268,90 3 86246 205 25 2509 31373 107996777 2012-03-02 16.00 ОЗ 1 1,99 268,90 4 86246 205 55 5555 32094 107684070 2012-03-02 16.00 ОЗ 2 10,38 268.
Saleem Ahmed
1

голосов
2

ответ
18

Просмотры

Groupby multiindex AND get sum for first index

У меня есть данные, которые я хочу GroupBy и просуммировать по мультииндексу, но также сумма только первой части мультииндекса. Таким образом, идея будет индекс будет вполне мультииндекс, и тогда я мог видеть, как размер, что и размер только его первой группы. Так, например, у меня есть dataframe, как: D = { 'attr_1': [ 'А', 'А', 'А', 'В', 'В'], 'attr_2': [ 'а', 'а' , 'б', 'а', 'б'], 'Val': [1,2,3,4,5]} DF = pd.DataFrame (д) DF a_1 a_2 валь 0 A 1 1 A 2 2 A B 3 3 B 4 4 B б 5 То, что я хотел бы сделать это: Вэл sum_a1 a_1 a_2 Аа 3 6 A B 3 6 B 4 9 B б 5 9 Я ищу способ сделать это чисто. Мой текущий подход, чтобы сделать новый dataframe, превратить его в словарь, сбросить индекс и карту словаря, но кажется, что там должно быть проще и вещий способ сделать это. а = df.groupby ([ 'a_1', 'a_2']). сумма () Ь = df.groupby ([ 'a_1']). сумма () my_dict = b.to_dict () [ 'Val'] а = a.reset_index () а [ 'sum_a1'] = a.a_1.map (my_dict) а a_1 a_2 вал sum_a1 0 а 3 6 1 A B 3 6 2 B 4 9 3 B B 5 9 Любая помощь будет в значительной степени оценили. Извинения, если это неоднократный вопрос, который я искал и не мог найти ничего, что было совсем то же самое. Карта (my_dict) а a_1 a_2 вал sum_a1 0 А 3 6 1 A B 3 6 2 B 4 9 3 B B 5 9 Любая помощь будет высоко оценена. Извинения, если это неоднократный вопрос, который я искал и не мог найти ничего, что было совсем то же самое. Карта (my_dict) а a_1 a_2 вал sum_a1 0 А 3 6 1 A B 3 6 2 B 4 9 3 B B 5 9 Любая помощь будет высоко оценена. Извинения, если это неоднократный вопрос, который я искал и не мог найти ничего, что было совсем то же самое.
Matthew Calvin
1

голосов
3

ответ
615

Просмотры

Добавление процент группы столбцов в Питоне панд

У меня есть сводная таблица в кадре данных, и я хотел бы рассчитать групповые проценты. например: и то, что мне нужно: я exluded исходных данных, но я бы ожидать, чтобы иметь это, и я знаю, что нужно добавить в этих столбцах. Если мне нужно добавить итоги, чтобы сделать это, что все в порядке, а также, как я буду фильтровать результаты позже во всяком случае.
Dimbo1979
0

голосов
0

ответ
7

Просмотры

Как ресэмплировать столбец по идентификатору

У меня есть набор данных, как: идентификатор значения даты 1 16-12-1 9 1 16-12-1-1 17-1-1 18 2 17-3-4 19 2 17-3-4 20 1 17-4-3 21 2 17-7-13 12 3 17-8-9 12 2 17-9-12 11 1 17-11-12 19 3 17-11-12 21 Единственная структура выше, что строки сортируются по дате. То, что я хочу сделать, это, группа по идентификатору и ресэмплировать даты, так что каждый идентификатор имеет те же числовые значения. Ежемесячно, еженедельно или ежедневно передискретизации будет достаточно. Мой последний набор данных (при ежегодном передискретизации) будет выглядеть следующим образом: значение интервала ид 1 16-12-1 - 17-12-1 говорят, 78 (только сумма) 1 16-12-1 - 17-12-1 51 1 16 -12-1 - 17-12-1 31 Как это реализовать? Будет ли это работать? dataframe.groupby (идентификатор) .resample (ежегодно) Есть ли более быстрый способ сделать это?
tstseby
1

голосов
1

ответ
79

Просмотры

Расчет в рамках dataframe группы панды

Я Панда Dataframe, как показано ниже. То, что я пытаюсь сделать это, раздел (или GroupBy) по BlockID, LineID, WordID, а затем в каждой группе использовать текущий WordStartX - предыдущий (WordStartX + WordWidth), чтобы получить еще один столбец, например, WordDistance, чтобы указать расстояние между этим слово и предыдущее слово. Этот пост Роу операции в группе с пандами dataframe очень полезно, но в моем случае несколько столбцов участвуют (WordStartX и WordWidth).
renjl0810
1

голосов
1

ответ
25

Просмотры

Passing array arguments to my own 2D function applied on Pandas groupby

25)]) возвращают hist_2d [0] .astype (INT) Я хотел бы применить свои 2D функции к каждому и каждой группе следующего GroupBy: df.groupby ([ 'длинный', 'ш']) Я попытался прохождения * арг к .Не ():. df.groupby ([ 'длинный', 'ш']) применяются (time_hist, [df.weekday, df.hour]), но я получаю сообщение об ошибке: «размер бункеров должен быть равен размерность образца х «. Конечно, размеры не соответствуют. Вся идея заключается в том, что я не знаю заранее, какая мини [будний день, час] массивы для отправки к каждому и каждой группе. Как я могу это сделать? «Размер бункеров должен быть равен размерности образца х». Конечно, размеры не соответствуют. Вся идея заключается в том, что я не знаю заранее, какая мини [будний день, час] массивы для отправки к каждому и каждой группе. Как я могу это сделать? «Размер бункеров должен быть равен размерности образца х». Конечно, размеры не соответствуют. Вся идея заключается в том, что я не знаю заранее, какая мини [будний день, час] массивы для отправки к каждому и каждой группе. Как я могу это сделать?
Amitai
1

голосов
1

ответ
519

Просмотры

панды: GroupBy несколько столбцов. Как получить все комбинации?

У меня есть следующие dataframe с описанием лиц, где age_range был вычислен из возрастной колонки возраст, пол группы age_range 0 46 F 1> = 30 и <60 1 50 F 1> = 30 и <60 2 63 F 2> = 60 3 65 F 2> = 60 4 34 F 1> = 30 и <60 5 42 Р 2> = 30 и <60 6 55 F 1> = 30 и <60 7 57 М 1> = 30 и <60 Оттуда, я бы как таблица дает для каждой группы, все age_ranges и количество лиц из группы и age_range, даже для пустых контейнеров (без лица <30 в любом из этих двух групп и все член группы 1 в> = 30 и < 60). Как я могу получить что-то вроде следующего? групповой счет age_range 0 1 <30 0 1 1>
jnc
1

голосов
1

ответ
48

Просмотры

Применение операций на группы без объединения

Я хочу, чтобы применить операцию на несколько групп кадра данных, а затем заполнить все значения этой группы по результату. Позволяет принимать среднее значение и np.cumsum в качестве примера и в следующем dataframe: DF = pd.DataFrame ({ "а": [1,3,2,4], "б": [1,1,2,2]} ), который выглядит следующим образом аб 1 1 0 1 3 1 2 2 2 3 4 2 Теперь я хочу, чтобы сгруппировать dataframe по б, а затем взять среднее значение для каждой группы, а затем применить np.cumsum к средству, а затем заменить все значения а со стороны (группы) зависимым результатом. В течение первых трех шагов, я хотел бы начать, как этот df.groupby ( «Ъ»). Средний (). Применить (np.cumsum), который дает аба-2 2 5 Но то, что я хочу, чтобы это абы-2 1 1 2 2 5 1 2 3 5 2 Любые идеи, как это можно решить в хорошем способе?
jan

Просмотр дополнительных вопросов