【问题标题】:Filtering Rows In Pandas DataFrame By Certain Date Criteria按特定日期条件过滤 Pandas DataFrame 中的行
【发布时间】:2020-08-20 23:05:21
【问题描述】:

我有一个在 Jupyter Notebook 中运行的代码,

这是我得到的 DataFrame 输出结果:-

    LOCATION        DATE   DAKOTA HURRI SPITFIRE
MyIdx                   
176 Duxford     10-Jul-2004     D   H   S
177 Cirencester 10-Jul-2004     D   H   S
178 Brize Nortn 10-Jul-2004     D   H   S
74  Shrivenham  10-Jun-2004     D   H   S
257 Campbletown 15-Aug-2004     D   --  S
258 Sunderland  15-Aug-2004     D   --  S
261 Scampton    15-Aug-2004     D   --  S
200 Fairford    15-Jul-2004     D   --  SS
22  Tilford     15-May-2004     D   --  S
23  Abingdon    15-May-2004     D   --  S
24  Hyde Heath  15-May-2004     D   --  S

版主可以帮我整理一下输出布局吗?

这是我按日期过滤行的代码的两个关键部分:-

(df3['DATE'].str.contains('-10$|15$'))  

和

display.sort_values(by=['DATE'])

第一行代码,是按每月 10 日和 15 日这两天过滤 DataFrame 行输出。

它首先正确输出 DataFrame 输出中的最早日期,即 15 之前的 10,但不是我想要的月份顺序:-

我首先想要 2004 年 6 月 10 日,然后是 7 月 10 日,然后是 5 月 15 日,然后是 7 月 15 日行等。如何修改该行代码,以便我可以过滤以获得该订单,而无需更改通过代码获取 Rows 的索引位置,我知道该怎么做?

我的意思是在两行代码中添加一些内容,以便在较早的月份与较早的日期之前,在同一天的较晚月份之前显示“受青睐”?即 10-Jun-2004 显示在 10-Jul-2004 之前,15-May-2004 显示在 15-Jul-2004 Rows 之前。但仍与第 10 天约会,显示在第 15 天之前的行。

所以显示的行在日期顺序中是这样的:-

10-Jun-2004
10-Jul-2004
15-May-2004
15-Jul-2004
15-Aug-2004

日期输出来自这行代码:-

display['DATE']= pd.to_datetime(display['DATE']).dt.strftime('%d-%b-%Y')

如果我能得到任何帮助,将不胜感激

最好的问候

艾迪·温奇

【问题讨论】:

标签: python pandas dataframe jupyter-notebook


【解决方案1】:

考虑分别拆分日、月和年的列,然后根据需要对这些列进行排序。使用数字月份进行排序会更容易(如果您希望这样显示,您可以保留显示的日期)。

喜欢:

import pandas as pd
data = [
{"Name": "Alice", "date": "15-May-2004", "Rating": 55},
{"Name": "Bob", "date": "10-Jun-2004", "Rating": 11},
{"Name": "Chanel", "date": "15-Aug-2004", "Rating": 33},
{"Name": "Del", "date": "10-Jul-2004", "Rating": 44},
{"Name": "Erin", "date": "15-Jul-2004", "Rating": 22},
]
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])
df['date_day'] = df.apply(lambda row: row.date.day, axis=1)
df['date_month'] = df.apply(lambda row: row.date.month, axis=1)
df['date_year'] = df.apply(lambda row: row.date.year, axis=1)
df = df.sort_values(by=["date_day", "date_month"])

结果:

    Name    date        Rating  date_day    date_month  date_year
1   Bob     2004-06-10  11      10          6           2004
3   Del     2004-07-10  44      10          7           2004
0   Alice   2004-05-15  55      15          5           2004
4   Erin    2004-07-15  22      15          7           2004
2   Chanel  2004-08-15  33      15          8           2004

另一种不添加列的方法是使用key 参数sort_values 来获得您想要的排序:

df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])
df = df.sort_values(by="date", key=lambda col: 100 * col.dt.day + col.dt.month)

【讨论】:

  • 嗨 Josh,非常感谢您的回复,我得到的输出实际上是通过 Pandas 中的 Jupyter Notebook 过滤网页数据集,而不是我自己的数据集。但是非常感谢四位您提供的有用信息,非常感谢。
  • 我可以在代码行中添加什么:- display.sort_values(by=['DATE']),即使用正则表达式,例如使用 .where ?等来实现我想要的?
  • 我不确定你如何获得 DaaFrame 是否重要——如果你可以访问它上面的调用方法,你应该能够使用上面的方法。我可能在那里遗漏了一些东西。如果您想避免向数据框添加列,我已经用另一种方法修改了答案。
  • 嗨 Josh,我收到错误消息:- TypeError: sort_values() 使用该代码行运行代码时出现意外的关键字参数“键”。
  • 您需要提供更多信息,可能是另一个问题。我相信上面的答案解决了熊猫中“如何根据日期和月份进行特定排序”的问题。
猜你喜欢
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
相关资源
最近更新 更多