Pandas - 具有多个索引的线图子图

时间:2016-07-01 18:32:42

标签: python python-3.x pandas matplotlib

我想创建线图子图,每个客户的每个代码在每个客户的单独文件中都有自己的子图。

          Date    Code  Customer     Purchases
1    6/22/2016   6-BZt     Piggy             8
2    6/22/2016   7rTPn     Piggy             1
3    6/22/2016   Hb4vZ     Piggy             1
4    6/22/2016   L0xs5     Piggy            94
5    6/22/2016   S5cLN     Goose             2
6    6/22/2016   k4Yp5     Goose             1
8    6/21/2016   6-BZt     Goose             8
9    6/21/2016   7rTPn     Piggy             1
10   6/21/2016   Hb4vZ     Piggy             1
11   6/21/2016   L0xs5     Piggy            94
12   6/21/2016   S5cLN     Goose             2
13   6/21/2016   k4Yp5     Goose             1

我试过

lineSess = lineSess.set_index(['Date', 'Customer', 'Code'])
lineSess.unstack().plot(subplots=True)

但它没有按照我想要的方式输出。

1 个答案:

答案 0 :(得分:0)

因此,我认为您要使用的操作顺序是首先将数据框拆分为每个客户的单独数据框,设置索引,然后取消堆叠和绘图。给定数量的客户,你可以做这样的事情

lineSess.sort_values(by='Customer', inplace=True)
lineSess.set_index('Customer', inplace=True)

# get list of unique customer names
customers = lineSess.index.unique().tolist()

# create an empty dataframe for each customer name
customer_dfs = {k: v for k, v in zip(customers, [pd.DataFrame()]*len(customers))}

# fill the empty dataframes with the data corresponding to each particular customer
for key, df in customer_dfs.iteritems(): # customer_dfs.items() for python-3.x
    df = lineSess.loc[lineSess.index==key]
    df = df.set_index(['Date', 'Code'], drop=True)
    df['Purchases'].unstack(level='Code').plot(subplots=True, title=key)

由于购买次数从一天到下一天没有变化,因此您提供的数据会显得相当沉闷。但假设这只是数据集的一部分,那么这些图可能会提供更多信息。