Как объединить два dataframes в Python - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть два фрейма данных, я хочу присоединиться к ним, чтобы я мог проверить количество той недели в каждом году в отдельном фрейме данных.

df1=  City  Week        qty       Year
      hyd   35          10        2015
      hyd   36          15        2015
      hyd   37          11        2015
      hyd   42          10        2015
      hyd   23          10        2016
      hyd   32          15        2016
      hyd   37          11        2017
      hyd   42          10        2017
      pune  35          10        2015
      pune  36          15        2015
      pune  37          11        2015
      pune  42          10        2015
      pune  23          10        2016
      pune  32          15        2016
      pune  37          11        2017
      pune  42          10        2017

 df2= city  Week         qty       Year
      hyd   23          10        2015
      hyd   32          15        2015
      hyd   35          12        2016
      hyd   36          15        2016
      hyd   37          11        2016
      hyd   42          10        2016
      hyd   43          12        2016
      hyd   44          18        2016
      hyd   35          11        2017
      hyd   36          15        2017
      hyd   37          11        2017
      hyd   42          10        2017
      hyd   51          14        2017
      hyd   52          17        2017
      pune  35          12        2016
      pune  36          15        2016
      pune  37          11        2016
      pune  42          10        2016
      pune  43          12        2016
      pune  44          18        2016
      pune  35          11        2017
      pune  36          15        2017
      pune  37          11        2017
      pune  42          10        2017
      pune  51          14        2017
      pune  52          17        2017

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

    city   Week  qty   Year   y2016_wk  qty    y2017_wk  qty y2015_week qty
     hyd    35   10    2015    2016_35    12     2017_35   11   nan      nan
     hyd    36   15    2015    2016_36    15     2017_36   15   nan      nan
     hyd    37   11    2015    2016_37    11     2017_37   11   nan      nan
     hyd    42   10    2015    2016_42    10     2017_42   10   nan      nan
     hyd    23   10    2016    nan        nan    2017_23   x    2015_23   10
     hyd    32   15    2016    nan        nan    2017_32   y    2015_32   15
     hyd    37   11    2017    2016_37    11       nan     nan 2015_37   x
     hyd    42   10    2017    2016_42    10       nan     nan 2015_42   y
     pune   35   10    2015    2016_35    12     2017_35     11  nan     nan 
     pune   36   15    2015    2016_36    15     2017_36     15  nan     nan
     pune   37   11    2015    2016_37    11     2017_37     11  nan     nan
     pune   42   10    2015    2016_42    10     2017_42     10  nan     nan

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

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

import pandas as pd 

df3 = pd.concat([df1, df2], ignore_index=True)
df4 = df3.pivot(index='Week', columns='Year', values='qty')

print(df4)

Year  2015  2016  2017
Week                  
35    10.0  12.0  11.0
36    15.0  15.0  15.0
37    11.0  11.0  11.0
42    10.0  10.0  10.0
43     NaN  12.0   NaN
44     NaN  18.0   NaN
51     NaN   NaN  14.0
52     NaN   NaN  17.0
0 голосов
/ 24 апреля 2018

Вы можете разбить вашу задачу на несколько шагов:

  1. Объедините ваши кадры данных df1 и df2.
  2. Создайте список данных из вашего объединенного кадра данных,разделение по годам.
  3. Одновременно переименуйте столбцы, чтобы отразить год, установите индекс на Week.
  4. Наконец, объедините вдоль axis=1 и reset_index.

Вот пример:

df = pd.concat([df1, df2], ignore_index=True)

dfs = [df[df['Year'] == y].rename(columns=lambda x: x+'_'+str(y) if x != 'Week' else x)\
                          .set_index('Week') for y in df['Year'].unique()]

res = pd.concat(dfs, axis=1).reset_index()

Результат:

print(res)

   Week  qty_2015  Year_2015  qty_2016  Year_2016  qty_2017  Year_2017
0    35      10.0     2015.0      12.0     2016.0      11.0     2017.0
1    36      15.0     2015.0      15.0     2016.0      15.0     2017.0
2    37      11.0     2015.0      11.0     2016.0      11.0     2017.0
3    42      10.0     2015.0      10.0     2016.0      10.0     2017.0
4    43       NaN        NaN      12.0     2016.0       NaN        NaN
5    44       NaN        NaN      18.0     2016.0       NaN        NaN
6    51       NaN        NaN       NaN        NaN      14.0     2017.0
7    52       NaN        NaN       NaN        NaN      17.0     2017.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...