按日和月对数据进行排序(忽略年份)python pandas

Posted

技术标签:

【中文标题】按日和月对数据进行排序(忽略年份)python pandas【英文标题】:Sorting data by day and month (ignoring year) python pandas 【发布时间】:2019-10-07 00:19:58 【问题描述】:

我发现了许多与我类似的问题,但没有一个能准确回答(this one 最接近,但它侧重于 ruby​​)。

我有一个这样的熊猫数据框:

import pandas as pd
import numpy as np

df = pd.DataFrame('Date': pd.date_range('2014-10-03', '2015-10-02', freq='1D'), 'Variable': np.random.randn(365))
df.head()

Out[272]: 
        Date  Variable
0 2014-10-03  0.637167
1 2014-10-04  0.562135
2 2014-10-05 -1.069769
3 2014-10-06  0.556997
4 2014-10-07  0.253468

我想对从 1 月 1 日到 12 月 31 日的数据进行排序,忽略 Date 列的年份部分。背景是我想跟踪一年中Variable 的变化,但我的月经从十月份开始到结束。

我想为月份和年份创建一个单独的列,然后按这些列进行排序。但我不确定如何以“正确”和简洁的方式做到这一点。

预期输出:

  Date   Variable
0 01-01  0.637167  # (Placeholder-values)
1 01-02  0.562135
2 01-03 -1.069769
3 01-04  0.556997
4 01-05  0.253468

【问题讨论】:

【参考方案1】:

您只需执行以下操作即可创建daymonth

df = pd.DataFrame(data=pd.date_range('2014-10-03', '2015-10-02', freq='1D'), columns=['date'])
df['day'] = df['date'].apply(lambda x: x.day)
df['month'] = df['date'].apply(lambda x: x.month)

你可以让它更紧凑。但是快速分析,你可以使用上面的。

【讨论】:

【参考方案2】:

argsort出发的路上

yourdf=df.loc[df.Date.dt.strftime('%m%d').astype(int).argsort()]

【讨论】:

Date.dt... 中的实用程序基本上是我想要的。谢谢

以上是关于按日和月对数据进行排序(忽略年份)python pandas的主要内容,如果未能解决你的问题,请参考以下文章

按日和月分组原则

MYSQL按日,周和月分组,带有php时间戳[重复]

iOS 核心数据总和数据按日期、月份年份

在python中将日期时间拆分为年和月列

获取不同年份中按日/月的最早日期

Python 对跨多个年份记录在同一日历日期中的值进行排序