Объединить две строки в том же Dataframe, если их индекс одинаковый?

Я создал большой Dataframe, потянув данные из базы данных Azure. Конструкция блока данных была не простой, как мне приходилось делать по частям, используя функцию concat для добавления новых столбцов в набор данных, поскольку они были извлечены из базы данных.

Это работало нормально, однако я индексирую дату ввода и при конкатенации иногда получаю две строки данных с одним и тем же индексом. Возможно ли для меня объединить строки с одним и тем же индексом? Я искал в Интернете решения, но я всегда сталкиваюсь с примерами, пытающимися объединить два отдельных фрейма данных вместо слияния строк в одном и том же фрейме.

В итоге:

Эта

Col1 Col2 2015-10-27 22:22:31 1400 2015-10-27 22:22:31 50.5 

К этому

  Col1 Col2 2015-10-27 22:22:31 1400 50.5 

Я попытался использовать функцию groupby по индексу, но это просто испортилось. Большинство столбцов данных исчезло, и несколько очень больших номеров были выплюнуты.

Заметка:

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

  Col1 Col2 ... Col_n-1 Col_n 2015-10-27 21:15:60+0 1220 2015-10-27 21:25:4+0 1420 2015-10-27 21:28:8+0 1410 2015-10-27 21:37:10+0 51.5 2015-10-27 21:37:11+0 1500 2015-10-27 21:46:14+0 51 2015-10-27 21:46:15+0 1390 2015-10-27 21:55:19+0 1370 2015-10-27 22:04:24+0 1450 2015-10-27 22:13:28+0 1350 2015-10-27 22:22:31+0 1400 2015-10-27 22:22:31+0 50.5 2015-10-27 22:25:33+0 1300 2015-10-27 22:29:42+0 ... 1900 2015-10-27 22:29:42+0 63 2015-10-27 22:34:36+0 1280 

2 Solutions collect form web for “Объединить две строки в том же Dataframe, если их индекс одинаковый?”

Вы можете groupby по индексу и sum звонков:

 In [184]: df.groupby(level=0).sum() Out[184]: Col1 Col2 index 2015-10-27 22:22:31 1400 50.5 

Для всех, кого это интересует, я написал свою собственную функцию:

  1. пройти через фрейм данных
  2. принимая во внимание строки, требующие слияния, принимая во внимание индексы
  3. агрегировать или усреднять значения по всем строкам
  4. удалите все, кроме одной строки каждого набора, которые нуждаются в объединении, заменяя его значения скоплениями или средними значениями (в зависимости от того, что мне нужно)

код:

 def groupDataOnTimeBlock(data, timeBlock_type, timeBlock_factor): ''' Filter Dataframe to merge lines which are within the same time block. ie being part of the same x number of seconds, weeks, months... data: Dataframe to filter. timeBlock_type: Time period with which to group data rows. This can be data per: SECONDS, DAYS, MILLISECONDS timeBlock_factor: Number of timeBlock types to group on. ''' pd.options.mode.chained_assignment = None # default='warn' tBt = timeBlock_type.upper() tBf = timeBlock_factor if tBt == 'SEC' or tBt == 'SECOND' or tBt == 'SECONDS': roundType = 'SECONDS' elif tBt == 'MINS' or tBt == 'MINUTES' or tBt == 'MIN': roundType = 'MINUTES' elif tBt == 'MILLI' or tBt == 'MILLISECONDS': roundType = 'MILLISECONDS' elif tBt == 'WEEK' or tBt == 'WEEKS': roundType = 'WEEKS' else: raise ValueError ('Invalid time block type entered') numElements = len(data.columns) anchorValue = timeStampReformat(data.iloc[1,len(data.columns)-7], roundType, tBf) delIndex = [] mergeCount = 0 av_agg_arr = np.zeros([1,numElements], dtype=float) #Cycling through dataframe to get averages and note which rows to delete for i, row in data.iterrows(): #i is the index value, from 0 backDate = timeStampReformat(row['Timestamp'], roundType, tBf) data.loc[i,'Timestamp'] = backDate #can be done better. Not all rows need updating. if (backDate > anchorValue): #if data should be grouped delIndex.pop() #remove last index as this is the final row to use delIndex.append(i) #add current row so that it isnt missed. print('collate') if mergeCount != 0: av_agg_arr = av_agg_arr/mergeCount for idx in range(1,numElements-1): if isinstance(row.values[idx],float): data.iloc[i-1, idx] = av_agg_arr[0, idx] #configure previous (index i -1) row. This is the last of the prior datetime group anchorValue = backDate mergeCount = 0 # Re-initialising aggregates and passing in current row values. av_agg_arr = av_agg_arr - av_agg_arr for idx in range(1,numElements-1): if isinstance(row.values[idx],float): if not pd.isnull(row.values[idx]): av_agg_arr[0,idx] += row.values[idx] else: #else if data is still part of same datetime group for idx in range(1,numElements-1): if isinstance(row.values[idx],float): if not pd.isnull(row.values[idx]): av_agg_arr[0,idx] += row.values[idx] mergeCount += 1 delIndex.append(i) #picking out index value of row data.drop(data.index[delIndex], inplace=True) #delete all flagged rows data.reset_index() pd.options.mode.chained_assignment = 'warn' # default='warn' return data 
  • Можем ли мы загрузить pandas DataFrame в .NET ironpython?
  • Преобразование Pandas DataFrame в оранжевую таблицу
  • найти максимум за столбец значений, которые приходят до минимума
  • Построение линейного графика с барами ошибок и точками данных из pandas DataFrame
  • pandas - проблемы с настройкой цвета цветной печати boxplot
  • Сравнение pandas повышает TypeError: не может сравниться массив dtyped со скаляром типа
  • Выделите все, кроме списка столбцов из pandas dataframe
  • Pandas не может читать файл hdf5, созданный с помощью h5py
  • Matplotlib Bar Chart выбирает цвет, если значение положительное, а значение отрицательное
  • Python pandas dataframe - любой способ установить частоту программно?
  • Pandas - разница между объединением и объединением
  •  
    Interesting Posts for Van-Lav

    Python и "произвольные целые числа точности"

    Python MySQLdb TypeError: не все аргументы, преобразованные во время форматирования строки

    Создание тепловой карты matplotlib с двумя разными цветными наборами данных

    Выборочно отображать или скрывать кнопку в дереве в OpenERP

    Python, как писать в двоичный файл?

    Отправка изображения поверх сокетов (ТОЛЬКО) в Python, изображение не может быть открыто

    Как реализовать версию, поддерживающую только приложение, в SQLAlchemy

    Возвращаемое значение x = os.system (..)

    Темы и tkinter python 3

    Что случилось с моим СПС?

    Добавление контекстного меню правой кнопки со ссылкой на несколько виджетов?

    Как мы можем использовать открытые API-интерфейсы MS-коммуникатора в python, возможно ли это?

    Флажок зависает при отправке почтового запроса самому себе

    Может ли Python быть встроен в HTML, например PHP и JSP?

    генерировать 3 разных случайных числа

    Python - лучший язык программирования в мире.