【问题标题】:Reference grouping columns as x-axis in pyplot在pyplot中参考分组列作为x轴
【发布时间】:2019-02-01 17:28:17
【问题描述】:

我有一个具有这种结构的数据框:

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'])

我对两个变量进行了分组,provinceyear

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 部分。

【问题讨论】:

    标签: pandas dataframe matplotlib plot pandas-groupby


    【解决方案1】:

    你想要类似下面的东西吗?

    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()
    

    【讨论】:

    • 你能用上面的公式说明如何做到这一点吗? plt.plot(<reference-year-here>, ...)
    • 使用pandas plot 更容易用一行代码绘制(内部称为matplotlib's plot。为什么要使用matplotlib plot呢?
    • 我经常遇到两种方法:从数据框本身调用绘图函数 (some_df.plot) 或使用 plt 函数 (plt.plot(some_df...))。我想坚持使用第二个,因为我是 matplotlib 的初学者,这让我很困惑。也许在我掌握了 plt 并完全理解了它的工作原理之后,我会切换到第一种方法。
    猜你喜欢
    • 2014-12-05
    • 2021-03-24
    • 2015-09-16
    • 2020-02-12
    • 1970-01-01
    • 2018-08-19
    • 2021-09-10
    • 2018-06-11
    相关资源
    最近更新 更多