Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在大熊猫中按月份分组日期_Python_Pandas_Data Analysis - Fatal编程技术网

Python 在大熊猫中按月份分组日期

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

我目前正在尝试整理Sentdex数据分析视频中使用的鳄梨价格数据:

以下是我正在使用的数据集:

我想按月份对加利福尼亚州的日期进行分组,最终以平均价格绘制月份图表

我目前编写了以下代码:

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年的每个月都要这样做会很麻烦,我想知道是否有一种更有效的方法可以按月对日期进行分组。

我想你需要,在
中使用convert
Date
To
DatetimeIndex
读取\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
列进行绘图?