pandas - 在pyplot中参考分组列作为x轴
问题描述
我有一个具有这种结构的数据框:
custid province year features... label
123 AB 2005 ... 0
124 ON 2006 ... 1
...
999 QC 2012 ... 1
最后一列是标签/目标。
我有一个 lambda 函数:
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
部分。
解决方案
你想要类似下面的东西吗?
df.groupby(['year', 'province']).apply(churn_per_feature)['cust_count'].unstack().plot(legend=True)
与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()
推荐阅读
- javascript - useEffect 中的 IntersectionObserver 只工作一次
- import - 如何在不添加整个 plotly.min.js 的情况下将 Treemap 图表添加到 plotly-basic.min.js?
- python - 使用 pandas 跳过带有“#”的行
- xml - 在 VBA 中使用单元格中的文件路径
- android - 如何观察android中的AtomicInteger变量值变化?
- php - 我可以使用 mysqli_prepare() 阻止在我的 php 网站上运行 javascript 作为输入吗
- bash - 如何获取 xargs 命令输出和退出代码
- java - 具有特定值的 Mockito.anyList()
- file-upload - Odoo:在合作伙伴模型中上传文件
- php - WooCommerce:取消注册/出队失败时删除块 style.css