【问题标题】:Pandas - .loc / lambda / time series熊猫 - .loc / lambda / 时间序列
【发布时间】:2020-08-20 12:36:19
【问题描述】:

我做了一个网页抓取,它返回一个端口拥塞表。因此,每一行代表一艘船及其到达、停泊和离开的日期。

Link for data source

我希望我的代码只检索从昨天到前 7 天的间隔数据,即从前一周到昨天。

我尝试了下面的脚本来检索昨天的数据,效果很好。 我使用 tabela['departure'] 的日期作为参考:

today = date.today().strftime("%Y-%m-%d")
today = datetime.strptime(today, '%Y-%m-%d')

yesterday = pd.to_datetime(today - pd.Timedelta('1 days 00:00:00'))

df0 = tabela.loc[lambda x: pd.to_datetime(x['departure'].dt.date) == yesterday, :]

如何检索前一周的整个间隔?

我尝试了以下方法,但它没有返回数据框:

time = ['1 days 00:00:00', '2 days 00:00:00', '3 days 00:00:00', '4 days 00:00:00', '5 days 00:00:00', '6 days 00:00:00', '7 days 00:00:00']

week = pd.to_datetime([today - pd.Timedelta(i) for i in time])

tabela.loc[lambda x: [ x for x in list(pd.to_datetime(x['departure'].dt.date)) if x in week],:]

【问题讨论】:

  • 请发布您的实际数据样本,以及正确输出的示例。
  • 实际上我正在寻找有关如何使用 .loc 使用更多条件的答案。还是谢谢

标签: python pandas lambda pandas-loc


【解决方案1】:

.loc 中,使用& 组合多个条件。

Syntax: df.loc[condition1 & condition2]

对于你的情况,你可以这样尝试。

from datetime import datetime
import pandas as pd

today = datetime.today()
yest = today - pd.Timedelta('1 days 00:00:00')
lastweek = yest - pd.Timedelta('7 days 00:00:00')

tabela.loc[(tabela['departure']<=yest) & (tabela['departure']>=lastweek)]

希望,这会有所帮助。

【讨论】:

  • 谢谢!这正是我正在寻找的解决方案
  • 只是为了记录,我刚刚提出了一个“新”且更简单的解决方案:tabela.query("(departure &lt; @today) &amp; (departure &gt;= last_week)")
猜你喜欢
  • 2021-02-07
  • 2016-09-10
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2018-11-24
相关资源
最近更新 更多