Python 在大熊猫中按月份分组日期
我目前正在尝试整理Sentdex数据分析视频中使用的鳄梨价格数据: 以下是我正在使用的数据集: 我想按月份对加利福尼亚州的日期进行分组,最终以平均价格绘制月份图表 我目前编写了以下代码:Python 在大熊猫中按月份分组日期,python,pandas,data-analysis,Python,Pandas,Data Analysis,我目前正在尝试整理Sentdex数据分析视频中使用的鳄梨价格数据: 以下是我正在使用的数据集: 我想按月份对加利福尼亚州的日期进行分组,最终以平均价格绘制月份图表 我目前编写了以下代码: import pandas as pd df = pd.read_csv(avocado.csv") cali = pd.DataFrame() region_df = df.copy()[ df['region'] == "California" ] cali = re
import pandas as pd
df = pd.read_csv(avocado.csv")
cali = pd.DataFrame()
region_df = df.copy()[ df['region'] == "California" ]
cali = region_df[["Date","AveragePrice"]]
M=["Jan",'Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
cali = region_df[["Date","AveragePrice"]]
cali["Month"] = "NA"
cali.loc[cali.Date.str.contains('2015-01'), 'Month'] = M[0]
cali.set_index("Date", inplace=True)
cali.sort_index(inplace=True)
这是表的输出:
从2015年到2018年的每个月都要这样做会很麻烦,我想知道是否有一种更有效的方法可以按月对日期进行分组。我想你需要,在中使用convertDate
ToDatetimeIndex
读取\u csv
如果需要,绘制年与月的关系图:
df = pd.read_csv("avocado.csv", index_col=['Date'], parse_dates=['Date'])
region_df = df[df['region'] == "California" ]
s = region_df.resample('MS').AveragePrice.mean()
print (s)
s.plot()
如果需要绘制月份,如1月、2月..
:
df = pd.read_csv("avocado.csv", index_col=['Date'], parse_dates=['Date'])
region_df = df[df['region'] == "California" ].copy()
region_df = region_df.sort_index()
s = region_df.groupby(region_df.index.strftime('%b'), sort=False).AveragePrice.mean()
print (s)
Date
Jan 1.218333
Feb 1.191875
Mar 1.281765
Apr 1.306923
May 1.263929
Jun 1.360000
Jul 1.502857
Aug 1.583462
Sep 1.626250
Oct 1.723929
Nov 1.527308
Dec 1.298846
Name: AveragePrice, dtype: float64
d.plot()
如果您不介意在数据框上创建新列,可以使用以下代码:
import pandas as pd
from datetime import datetime
data = [
{'Date': '2015-12-27', 'AveragePrice': 1.33, 'TotalVolume': 64236.62},
{'Date': '2015-08-26', 'AveragePrice': 2.66, 'TotalVolume': 900},
{'Date': '2015-08-5', 'AveragePrice': 2.34, 'TotalVolume': 900}
]
df = pd.DataFrame(data)
df['Date'] = df['Date'].apply(lambda x: datetime.strptime(x, '%Y-%m-%d'))
df['Month'] = df['Date'].apply(lambda x: x.month)
df['Year'] = df['Date'].apply(lambda x: x.year)
df.groupby(['Month', 'Year']).sum(['AveragePrice', 'TotalVolume'])
通过将“Date”值的数据类型转换为datetime64,将“Date”列数据解析为名称中的月份
df = pd.read_csv("avocado.csv")
cali = pd.DataFrame()
region_df = df.copy()[ df['region'] == "California" ]
cali = region_df[["Date","AveragePrice"]]
# Convert column 'Date' values data type to dtype='datetime64[ns]'
cali['Month'] = pd.DatetimeIndex(cali['Date']).month_name()
print(cali.head())
# Group them by month with mean value of 'AveragePrice'
grp = cali.groupby(cali['Month']).AveragePrice.mean()
print('\nGrouped Data:')
print(grp)
非常感谢,用最少的代码做了我想要的事情。如果我想在不平均每月价格的情况下按月绘制图表,我该怎么办。@Nexusapp106-不确定是否理解,axis=x和axis=y中应该是什么?@Nexusapp106-或者需要在region\u df=region\u df.sort\u index()
使用region\u df.AveragePrice.plot()
忽略.mean(),以给出s=region\u df.resample('MS')).AveragePrice绘制的数据给出axisx=date和axisy=price,但我希望axisx=month。@Nexusapp106-因此需要在region\u df=region\u df.sort\u index()之后使用region\u df['month']=region\u df.index.strftime(“%b”)
然后在axis=x
和AveragePrice
中按month
列进行绘图?