【问题标题】:Pandas extract time of certain entry from rows with same date熊猫从具有相同日期的行中提取某些条目的时间
【发布时间】:2021-09-21 22:42:57
【问题描述】:

我对 pandas 很陌生,我正在尝试找出如何从包含 same不同 日期、不同卖家的行的 DataFrame 中提取时间值、不同的状态以及每个状态的时间戳。

我需要从 DataFrame 中提取 每个日期 第一次出现State = "received" 的行,并每个卖家

正如您在上面的屏幕截图中看到的,状态 “received” 在同一日期为同一卖家显示了两次,但时间戳不同,我只需要它出现的行第一次。

PS。不幸的是,我没有尝试过任何代码,我搜索了很多,结果都是空的。任何帮助表示赞赏。

【问题讨论】:

  • df[df['State'] == 'Received'].groupby(['Seller', 'Date']).head(1)?
  • df[df['state'] == 'Received'].drop_duplicates(subset=['Seller', 'Date'])?
  • @It_is_Chris 给出了想要的结果。非常感谢。
  • 非常感谢@ifly6,这也可以按要求工作!

标签: python pandas date time


【解决方案1】:

IIUC,你需要pandas.groupby

>>> df[df["State"]=="Received"].groupby(["Date", "Seller"])["Time"].first()
Date      Seller  
6/1/2021  Seller_1    8:00:36
          Seller_2    9:45:30
6/2/2021  Seller_1    8:00:36
          Seller_2    9:33:02

如果您需要最早而不是第一个,则应使用min()

【讨论】:

  • 谢谢。在这种情况下, first 和 early 恰好相同,并且上述两个函数给出相同的结果。
【解决方案2】:

我会使用:

df[df['State'] == 'Received'].sort_values(by=['Seller', 'Date', 'Time']) \
    .drop_duplicates(subset=['Seller', 'Date'])

这将比分组更高效。

【讨论】:

  • OP 想要第一个而不是最早的所以可能不排序?
  • 我对“第一次”的解释是一个更外行的“第一次收到”而不是“第一次在这个数据集中遇到”。当然,如果 OP 在“第一次遇到”中表示“第一次”,则 OP 可以省略 sort_values 调用。
  • @ifly6,感谢您的解决方案。 sort_values 似乎为 DataFrame 提供了更好的组织,并且为每个卖家在每个日期的第一个“收到”提供了相同的预期结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 2019-06-06
  • 2021-11-01
  • 2020-06-24
  • 2016-07-27
  • 2018-08-26
  • 1970-01-01
相关资源
最近更新 更多