我已按月和日期对数据集进行了分组,并添加了第三列以计算每天的数据。
之前的数据框
month day
0 1 1
1 1 1
2 1 1
..
3000 12 31
3001 12 31
3002 12 31
现在的数据框:
month day count
0 1 1 300
1 1 2 500
2 1 3 350
..
363 12 28 700
364 12 29 1300
365 12 30 1000
每个月如何做子图,x是天,y是计数
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
df= pd.read_csv('/home/rand/Downloads/Flights.csv')
by_month= df.groupby(['month','day']).day.agg('count').to_frame('count').reset_index()
我是数据科学领域的初学者
答案 0 :(得分:1)
我认为您可以使用pandas.DataFrame.pivot
来更改表格的形状,以便于绘图。因此,在您的代码中,您可以执行以下操作:
plot_data= df.pivot(index='day', columns='month', values='count')
plot_data.plot()
plt.show()
这是假设您在每个月中都有相同的天数,因为在包含的样本中,第12个月只有30天。有关pivot的更多信息。
答案 1 :(得分:1)
尝试一下
fig, ax = plt.subplots()
ax.set_xticks(df['day'].unique())
df.groupby(["day", "month"]).mean()['count'].unstack().plot(ax=ax)
以上代码将为您提供12条线,分别代表一个绘图中的每个月。如果您希望在那几个月内拥有12个单独的子图,请尝试以下方法:
fig = plt.figure()
for i in range(1,13):
df_monthly = df[df['month'] == i] # select dataframe with month = i
ax = fig.add_subplot(12,1,i) # add subplot in the i-th position on a grid 12x1
ax.plot(df_monthly['day'], df_monthly['count'])
ax.set_xticks(df_monthly['day'].unique()) # set x axis
答案 2 :(得分:1)
尝试一下:
df = pd.DataFrame({
'month': list(range(1, 13))*3,
'days': np.random.randint(1,11, 12*3),
'count': np.random.randint(10,20, 12*3)})
df.set_index(['month', 'days'], inplace=True)
df.sort_index()
df = df.groupby(level=[0, 1]).sum()
将其绘制的代码:
df.reset_index(inplace=True)
df.pivot(index='days', columns='month', values='count').fillna(0).plot()