Concat 2 Dataframes с 54 записями дает 1 строку - PullRequest
0 голосов
/ 29 октября 2018

Я создал 2 кадра данных с общим индексом на основе года и района. В каждом кадре данных 58 строк, и год и район являются точными совпадениями. Тем не менее, когда я пытаюсь присоединиться к ним, я получаю новый фрейм данных со всеми объединенными столбцами (что я и хочу), но только одну строку - Нью-Йорк. Эта строка существует в обоих фреймах данных, как и все остальные, но только эта попадает в объединенный DF. Я пробовал несколько разных способов объединения фреймов данных, но все они делают то же самое. Этот пример использует:

pd.concat([ groupeddf,Popdf], axis=1)

Это Popdf с индексом (год, район):

                            Population
Year District                
2017 Albany                 309612
     Allegany               46894
     Broome                 193639
     Cattaraugus            77348
     Cayuga                 77603

Это groupeddf, индексированный по Году и Району (некоторые столбцы для ясности исключены):

                            Total SNAP Households  Total SNAP Persons  \
Year District                                                 
2017 Albany                 223057                 416302   
     Allegany               36935                  69802   
     Broome                 201586                 363504   
     Cattaraugus            75567                  144572   
     Cayuga                 64168                  121988   

Это объединенный DF после выполнения pd.concat([ groupeddf,Popdf], axis=1):

                     Population       Total SNAP Households  Total SNAP Persons  
Year District                                                               
2017 New York City      8622698       11314598               19987958   

Показывает, что объединенный фрейм данных имеет только 1 запись:

<class 'pandas.core.frame.DataFrame'>
MultiIndex: 1 entries, (2017, New York City) to (2017, New York City)
Data columns (total 4 columns):
Population               1 non-null int64
Total SNAP Households    1 non-null int64
Total SNAP Persons       1 non-null int64
Total SNAP Benefits      1 non-null float64
dtypes: float64(1), int64(3)
memory usage: 170.0+ bytes

ОБНОВЛЕНИЕ: я попробовал другой подход, и он показывает, что индексы, которые кажутся мне идентичными, не рассматриваются как идентичные.

Когда я выполняю этот код, я получаю дубликаты вместо слияния:

combined_df = groupeddf.merge(Popdf, how='outer',  left_index=True,   right_index=True)

Результаты выглядят так:

Year District                                                   
2017 Albany                      223057.0            416302.0   
    Albany                           NaN                 NaN   
    Allegany                     36935.0             69802.0   
    Allegany                         NaN                 NaN   
    Broome                      201586.0            363504.0   
    Broome                           NaN                 NaN   
    Cattaraugus                  75567.0            144572.0   
    Cattaraugus                      NaN                 NaN     

Единственное исключение - когда вы спускаетесь в Нью-Йорк. Это не дублирует, так что на самом деле рассматривается как тот же индекс. Так что с данными что-то не так, но я не уверен, что именно.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Прошло некоторое время, но я наконец разобрался. Название округа в кадре данных о населении содержало пробел в конце имени, где в SNAP df не было пробела.

"Albany " vs "Albany"
0 голосов
/ 29 октября 2018

Вы пытались использовать слияние, как это:

combined_df = merge(groupeddf, Popdf, how = 'inner', on = ['Year','District'])

Я сделал внутреннее, если вы хотите объединить только там, где район и год существуют в обоих кадрах. Если вы хотите сохранить все данные на левом кадре данных, но сопоставлять их только справа, выполните левое соединение и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...