Подтвердить что ты не робот

Объединение строк в pandas

У меня есть DataFrame с индексом, который называется city_id городов в формате [city],[state] (например, new york,ny, содержащий число целых чисел в столбцах). Проблема в том, что у меня есть несколько строк для одного и того же города, а я хотите свернуть строки, разделяющие city_id, добавив их значения столбца. Я посмотрел на groupby(), но не сразу стало очевидно, как применить его к этой проблеме.

Edit:

Пример: я хотел бы изменить это:

city_id    val1 val2 val3
houston,tx    1    2    0
houston,tx    0    0    1
houston,tx    2    1    1

в это:

city_id    val1 val2 val3
houston,tx    3    3    2

если есть строки ~ 10-20 тыс.

4b9b3361

Ответ 1

Начиная с

>>> df
              val1  val2  val3
city_id                       
houston,tx       1     2     0
houston,tx       0     0     1
houston,tx       2     1     1
somewhere,ew     4     3     7

Я мог бы сделать

>>> df.groupby(df.index).sum()
              val1  val2  val3
city_id                       
houston,tx       3     3     2
somewhere,ew     4     3     7

или

>>> df.reset_index().groupby("city_id").sum()
              val1  val2  val3
city_id                       
houston,tx       3     3     2
somewhere,ew     4     3     7

Первый подход передает значения индекса (в данном случае значения city_id) в groupby и говорит ему использовать их как групповые ключи, а второй сбрасывает индекс, а затем выбирает столбец city_id, Подробнее см. этот раздел в документах. Обратите внимание, что в объектах DataFrameGroupBy есть много других методов:

>>> df.groupby(df.index)
<pandas.core.groupby.DataFrameGroupBy object at 0x1045a1790>
>>> df.groupby(df.index).max()
              val1  val2  val3
city_id                       
houston,tx       2     2     1
somewhere,ew     4     3     7
>>> df.groupby(df.index).mean()
              val1  val2      val3
city_id                           
houston,tx       1     1  0.666667
somewhere,ew     4     3  7.000000

Ответ 2

Что-то в той же строке. Извините, не точную копию.

mydata = [{'subid' : 'B14-111', 'age': 75, 'fdg':1.78},
          {'subid' : 'B14-112', 'age': 22, 'fdg':1.56},{'subid' : 'B14-112', 'age': 40, 'fdg':2.00},]
df = pandas.DataFrame(mydata)

gg = df.groupby("subid",sort=True).sum()