【问题标题】:Pandas df: How to skip over specific dates in dt indexed for-loopPandas df:如何跳过 dt 索引 for 循环中的特定日期
【发布时间】:2020-07-25 14:18:42
【问题描述】:

我有一个由 1 分钟重采样数据索引的 df。我目前正在尝试迭代超过 1 分钟的重新采样数据帧,如下所示。我试图让里面的条件检查索引,它是一分钟一分钟的数据,检查日期时间是否是

我。在该月的最后 2 天和前 2 天之间
ii.如果它在 7 月到 11 月之间
三。如果它在一天中的某个小时之间

我正在尝试分析一些微小的现象,但我认为上述 2 点的数据不稳定,因此我想删除它们或检查这些条件以让算法忽略它们。谢谢!

我正在迭代的索引是 MINUTE by MINUTE 数据。

for idx, row in df.iterrows():
  if (not first 2 days of every month and not last 2 days of every month):
    #do something
  elif (not during july TO november):
    #do something
  elif (not between 8am and 9am):
    #do something
  elif (not all):
    #do something

所以我现在正在做

for index, row in df:
  if index not in pd.date_range('2018-08-01', '2018-09-01'):
    df['new_column'] = df['data']*2

但这似乎不适用于下面的 df。

                     data
Datetime    
2018-01-03 08:13:00 207.45
2018-01-03 08:14:00 207.45
2018-01-03 08:15:00 207.45
2018-01-03 08:16:00 207.45
2018-01-03 08:17:00 207.45

【问题讨论】:

标签: python pandas datetime


【解决方案1】:

尝试创建三个过滤器掩码以避免循环:

mask1 = (df.index.day > 2) & (df.index.day <= df.index.days_in_month-2)
mask2 = (df.index.month < 7) | (df.index.month > 11)
mask3 = ~df.index.indexer_between_time('08:00', '09:00')

然后将它们用作:

df.assign(new_col1=np.nan, new_col2=np.nan, new_col3=np.nan)
df.loc[mask2, new_col2] = df.loc[mask2, 'data'] * 2

或

df.assign(new_col2 = mask2 * df.data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 2013-04-16
    • 2018-01-03
    • 2020-05-13
    • 2018-07-09
    相关资源
    最近更新 更多