我有这种格式的数据框。
brand-var1-var2(date)-var3
A - 100 - 20/12 - 300
A - 110 - 12/12 - 132
B - 24 - 24/12 - 543
C - 235 - 3/12- 534
我想在每个品牌的jupyter笔记本中打印单独的折线图
对于品牌A
x_axis = df.var2
y_axis = df.var1
然后是品牌B
x_axis = df.var2
y_axis = df.var1
然后是品牌C等等......
我尝试使用带matplotlib的Loop但是徒劳无功。
from pandas import *
import matplotlib.pyplot as plt
%matplotlib inline
ys = df['orders'], df['gmv']
x_ax = df['brand']
for y_ax in ys:
ts = Series(y_ax,index=x_ax)
ts.plot(kind='bar', figsize=(15,5))
plt.show()
这显示错误 - ValueError: cannot reindex from a duplicate axis
由于
答案 0 :(得分:0)
我不确定你想要什么类型的情节。在问题的开头,您要求一个线图,但在代码中您调用kind='bar'
。由于数据框看起来像是包含时间序列数据,因此我假设您需要一个折线图。
我使用以下内容创建了一个随机数据框:
# Import packages
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime
import random
# Random date function
def random_date():
year = random.choice(range(2000, 2010))
month = random.choice(range(1, 13))
day = random.choice(range(1, 29))
return datetime(year, month, day)
# Random df
df = pd.DataFrame()
df['date'] = [random_date() for i in range(100)]
df['brand'] = [random.choice(['A','B','C']) for i in range(100)]
df['var1'] = np.random.randint(0,100,size=(100, 1))
df.head()
date brand var1
0 2003-03-27 B 16
1 2009-06-24 C 7
2 2008-04-17 A 82
3 2004-02-20 C 9
4 2007-05-10 B 69
然后,要为每个品牌创建单独的线条图,请执行以下操作:
for brand in ['A', 'B', 'C']:
# Subset df by brand
sub = df[df['brand']==brand]
# Make Series object
ts = pd.Series(data=list(sub['var1']),index=sub['date'])
# Plot
ts.plot()
plt.title('Brand {}'.format(brand))
plt.show()
这是输出: