слияние и визуализация наборов данных с использованием панд - PullRequest
0 голосов
/ 09 сентября 2018

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

DataFrame1 for average Income per year

Country | Year 1  | Year 2  | Year 3
  A     |   50    |   30    |   20
  B     |   70    |   20    |   90
  C     |   10    |   20    |   30

Dataframe2 for Fertility rate 

Country | Year 1 | Year 2 | Year 3
   A    |   1.5  |   2    |  2.5
   B    |   2    |   2    |   3
   C    |   1    |   1    |   4 

По сути, я пытаюсь показать связь между DataFrame1 и DataFrame2 на протяжении многих лет на matplotlib. Но я не могу объединить их, поскольку они имеют те же заголовки, что и годы? Кроме того, я просто не могу найти график для сравнения этих данных на matplotlib, когда пытаюсь использовать ось X в качестве лет. Любой совет будет полезен, так как я использую значения выше, так как наборы данных огромны. Может ли быть так, что данных слишком много?

1 Ответ

0 голосов
/ 09 сентября 2018

Рассмотрите возможность создания отдельных страновых графиков со вторичной осью, поскольку вы отслеживаете две метрики разных шкал: Доход и Плодородие .Для этой настройки вам нужно изменить длинный формат на pandas.melt().Затем выполните итерацию по отдельным странам для фильтрации фреймов данных.

Данные

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df1 = pd.DataFrame({'Country': ['A', 'B', 'C'],
                    'Year 1': [50, 70, 10],
                    'Year 2': [30, 20, 20],
                    'Year 3': [20, 90, 30]})

df1 = df1.melt(id_vars='Country', value_name='Income', var_name='Year')

df2 = pd.DataFrame({'Country': ['A', 'B', 'C'],
                    'Year 1': [1.5, 2, 1],
                    'Year 2': [2.0, 2, 1],
                    'Year 3': [2.5, 3, 4]})

df2 = df2.melt(id_vars='Country', value_name='Fertility', var_name='Year')

График

for c in df1['Country'].unique():
    fig, ax1 = plt.subplots(figsize=(10,4))

    ax2 = ax1.twinx()
    df1[df1['Country']==c].plot(kind='line', x='Year', y='Income', ax=ax1, color='g', legend=False)
    df2[df2['Country']==c].plot(kind='line', x='Year', y='Fertility', ax=ax2, color='b', legend=False)

    plt.title('Country ' + c)
    ax1.set_xlabel('Years')
    ax1.set_ylabel('Average Income Per Year')
    ax2.set_ylabel('Fertility Rate')

    lines = ax1.get_lines() + ax2.get_lines()
    ax1.legend(lines, [l.get_label() for l in lines], loc='upper left')

    ax1.set_xticks(np.arange(3))
    ax1.set_xticklabels(df1["Year"].unique())

    plt.show()
    plt.clf()

plt.close()

Plot Output

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