您能否从熊猫中提取日期中的年份和月份

时间:2019-12-09 15:11:37

标签: python pandas dataframe plot

我有一个带有日期列的数据框(类型为datetime)。我可以轻松提取年份或月份来进行分组,但是找不到从日期同时提取年份和月份的方法。我需要分析产品在一年内的性能,并制作一个图表,说明每个月的性能。自然,我不能只按月分组,因为它将在两个不同的年份中添加相同的月份,而按年分组并不能产生我想要的结果,因为我需要每月查看性能。

我一直在研究几种解决方案,但是到目前为止,它们都没有起作用。

所以基本上,我当前的约会是这样的

2018-07-20
2018-08-20
2018-08-21
2018-10-11
2019-07-20
2019-08-21

我只想拥有2018-07, 2018-08, 2018-10,依此类推。

5 个答案:

答案 0 :(得分:6)

您可以使用to_period

df['month_year'] = df['date'].dt.to_period('M')

答案 1 :(得分:1)

如果将它们存储为datetime,则应该可以使用datetime.strftime(https://strftime.org/)创建仅包含年份和月份进行分组的字符串。

它看起来像:

df['ym-date'] = df['date'].dt.strftime('%Y-%m')

答案 2 :(得分:0)

一种方法可能是将列转换为所有这些日期的第一个月,然后逐月创建分析:

date_col = pd.to_datetime(['2011-09-30', '2012-02-28'])
new_col = date_col + pd.offsets.MonthBegin(1)

您的分析在这里保持每月不变

答案 3 :(得分:0)

有两个选项,一个是映射到每月的第一天:

假设您的日期位于“日期”列中,例如:

df['Date_no_day'] = df['Date'].apply(lambda x: x.replace(day=1))

如果您真的只想存储年和月,则可以映射到(year, month)元组,例如:

df['Date_no_day'] = df['Date'].apply(lambda x: (x.year, x.month))

在这里,您可以按此新列分组/汇总并执行分析

答案 4 :(得分:0)

如果您有一些使用日期时间值的数据,例如:

sale_date = [
    pd.date_range('2017', freq='W', periods=121).to_series().reset_index(drop=True).rename('Sale Date'),
    pd.Series(np.random.normal(1000, 100, 121)).rename('Quantity')
]
sales = pd.concat(data, axis='columns')

Sample data

您可以像这样同时按年份和日期分组:

d = sales['Sale Date']
sales.groupby([d.dt.year.rename('Year'), d.dt.month.rename('Month')]).sum()

enter image description here

您还可以创建一个字符串,该字符串代表月份和年份的组合,并以此分组:

ym_id = d.apply("{:%Y-%m}".format).rename('Sale Month')
sales.groupby(ym_id).sum()

enter image description here

相关问题