Объединитесь на 2 мультииндексных фреймах данных, имеющих разные столбцы, используя панд - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть 2 кадра:

df1 = pd.DataFrame({'Country': [ 'US', 'IT', 'FR'],
                  'Location': [ 'Hawai', 'Torino', 'Paris'],
                  '2000': [20, 40,60],
                    '2002': [100,200,300]

                   })
df1.set_index(['Country','Location'],inplace=True)

df2 = pd.DataFrame({'Country': [ 'US', 'IT', 'FR','GB'],
                '2002': [2, 4,3,6],
                  '2018': [6, 88,7,90]
                   })
df2.set_index(['Country'],inplace=True)  

Я хотел бы рассчитать соотношение между 2 для обычных лет (столбцы)

                  2000  2002
Country Location            
US      Hawai       20   100
IT      Torino      40   200
FR      Paris       60   300
         2002  2018
Country            
US          2     6
IT          4    88
FR          3     7
GB          6    90

это отношение должно дать

                      2002
    Country Location           
    US      Hawai      50
    IT      Torino     50
    FR      Paris      100  

Попытка объединения нескольких способов, но не может этого достичь.Есть идеи?

1 Ответ

0 голосов
/ 23 февраля 2019

Используйте DataFrame.div по первому уровню:

df = df1.div(df2, level=0)
print (df)
                  2000   2002  2018
Country Location                   
US      Hawai      NaN   50.0   NaN
IT      Torino     NaN   50.0   NaN
FR      Paris      NaN  100.0   NaN

И при необходимости удалите все столбцы NaN s (столбцы, которые не находятся в обоих кадрах данных):

df = df1.div(df2, level=0).dropna(axis=1, how='all')
print (df)
                   2002
Country Location       
US      Hawai      50.0
IT      Torino     50.0
FR      Paris     100.0

Другое решение - сначала получить столбцы, которые находятся в DataFrame s по intersection и фильтрации перед делением:

c = df1.columns.intersection(df2.columns)
print (c)
Index(['2002'], dtype='object')

df = df1[c].div(df2[c], level=0)
print (df)
                   2002
Country Location       
US      Hawai      50.0
IT      Torino     50.0
FR      Paris     100.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...