Панды манипулируют несколькими фреймами данных - PullRequest
2 голосов
/ 10 июля 2019

Я пытаюсь выполнить некоторые манипуляции с данными.Как я могу взять фрейм данных типа

2018 data

Age   City1    City2
0         5        10
1         6        11
2         8        21


2019 data

Age   City1    City2
0         15        20
1         63        21
2         83        41

и создать отдельные фреймы данных типа

Age 0 
       2018    2019
City1     5      15
City2    10      20 

Age 1 
       2018    2019
City1     6      63
City2    11      21 

Age 2 
       2018    2019
City1     8      83
City2    21      41 

Чтобы сделать фрейм данных

df1 = {'Age': [0,1,2], 'City1': [5,6,8], 'City2': [10,11,22]}

df2 = {'Age': [0,1,2], 'City1': [15,63,83], 'City2': [10,11,41]}

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Используйте concat с параметром keys для получения информации о годах, измените на DataFrame.stack:

df1 = pd.DataFrame(df1)
df2 = pd.DataFrame(df2)

df = pd.concat([df1.set_index('Age'), df2.set_index('Age')], keys=(2018, 2019), axis=1).stack()
print (df)
         2018  2019

0 City1     5    15
  City2    10    10
1 City1     6    63
  City2    11    11
2 City1     8    83
  City2    22    41

При необходимости выберите каждый DataFrame из MultiIndex:

print (df.loc[0])
print (df.xs(0))
       2018  2019
City1     5    15
City2    10    10

print (df.loc[1])
print (df.xs(1))

       2018  2019
City1     6    63
City2    11    11

При необходимости создайте словарь из цикла DataFrame s с помощью groupby объекта:

d = {k: v.reset_index(level=0, drop=True) for k, v in df.groupby(level=0)}
print (d)
{0:        2018  2019
City1     5    15
City2    10    10, 1:        2018  2019
City1     6    63
City2    11    11, 2:        2018  2019
City1     8    83
City2    22    41}
0 голосов
/ 10 июля 2019

Вы можете установить Age в качестве индекса и использовать pd.DataFrame:

df_dicts = {2018:df1, 2019:df2}

df = pd.DataFrame({k:v.set_index('Age').stack() for k,v in df_dicts.items()})

дает двойной индексированный фрейм данных:

           2018  2019
Age                  
0   City1     5    15
    City2    10    10
1   City1     6    63
    City2    11    11
2   City1     8    83
    City2    22    41

И вы можете получить доступ к данным для каждого Age, например, df.loc[0], что дает:

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