Столбцы группировки ссылок как ось X в Pyplot - PullRequest
0 голосов
/ 27 августа 2018

У меня есть фрейм данных с такой структурой:

custid  province    year    features... label
123     AB          2005    ...         0
124     ON          2006    ...         1
...
999     QC          2012    ...         1

Последний столбец - метка / цель.

У меня есть лямбда-функция:

def churn_per_feature(x):
    d = {}
    d['churn_count'] = (x['label'] == 1).sum()
    d['cust_count'] = x['custid'].nunique()
    d['churn_rate'] = d['churn_count'] / float(d['cust_count'])
    return pd.Series(d, index = ['churn_count', 'cust_count', 'churn_rate'])

У меня есть группировка для двух переменных: province и year:

churn_per_province_year = df.groupby(['province', 'year']).apply(churn_per_feature)

Я пытаюсь pyplot это, один график с линиями, где ось X является yearsи каждая строка представляет province (пока я выбираю только 4 провинции с наибольшим числом клиентов, поэтому это не в цикле):

plt.plot(years, churn_per_province_year[churn_per_province_year['province'] == 'ON']['cust_count'])
plt.plot(years, churn_per_province_year[churn_per_province_year['province'] == 'AB']['cust_count'])
plt.plot(years, churn_per_province_year[churn_per_province_year['province'] == 'BC']['cust_count'])
plt.plot(years, churn_per_province_year[churn_per_province_year['province'] == 'QC']['cust_count'])
plt.show()

Я не знаю, как ссылаться на years часть.

1 Ответ

0 голосов
/ 27 августа 2018

Хотите что-то вроде следующего?

df.groupby(['year', 'province']).apply(churn_per_feature)['cust_count'].unstack().plot(legend=True)

enter image description here

С matplotlib plt.plot():

churn_per_province_year = df.groupby(['year', 'province']).apply(churn_per_feature).reset_index()
#from matplotlib import pyplot
#years = range(2005, 2019) # add the right range here
plt.plot(years, churn_per_province_year[churn_per_province_year['province'] == 'ON']['cust_count'], label='ON')
plt.plot(years, churn_per_province_year[churn_per_province_year['province'] == 'AB']['cust_count'], label='AB')
plt.plot(years, churn_per_province_year[churn_per_province_year['province'] == 'QC']['cust_count'], label='QC')
plt.legend()
plt.show()

enter image description here

...