遍历索引并将每个范围定义为一天

时间:2019-11-15 07:17:41

标签: python pandas date datetime object

我的最后一个问题没有找到任何帮助/答案,我找到了另一种方法,我想知道是否有可能迭代设置为索引的列(DateTime为pandas格式:

  • 2019-05-02 00:03:00
  • 2019-05-02 00:08:00
  • 2019-05-02 00:13:00
  • 2019-05-02 00:18:00
  • 2019-05-02 00:23:00
  • 2019-05-02 00:28:00
  • 2019-05-02 00:33:00
  • ...

,以便在迭代期间我可以指定从00:03:00到23:59:00的范围是一天 (做某事),依此类推。我在处理熊猫上的日期对象时遇到问题。 谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以像这样在day的{​​{1}}上进行循环。

datetime

这将为您提供以下结果:

import pandas as pd
from datetime import datetime, timedelta

df = pd.DataFrame(columns=['SomeDatetime'], index=[0,1,2,3,4,5])
now = datetime.now()
df.loc[0, 'SomeDatetime'] = now + timedelta(minutes = 10)
df.loc[1, 'SomeDatetime'] = now - timedelta(days = 1)
df.loc[2, 'SomeDatetime'] = now + timedelta(minutes = 15)
df.loc[3, 'SomeDatetime'] = now + timedelta(minutes = 20)
df.loc[4, 'SomeDatetime'] = now + timedelta(minutes = 50)
df.loc[5, 'SomeDatetime'] = now + timedelta(minutes = 90)

print("Dataframe\n")
print(df)
print("\nDay Loop\n")
for day in df['SomeDatetime'].dt.day.unique():
    day_value = df[df['SomeDatetime'].dt.day == day]
    print(day_value)

您也可以为Dataframe SomeDatetime 0 2019-11-15 09:02:47.784752 1 2019-11-14 08:52:47.784752 2 2019-11-15 09:07:47.784752 3 2019-11-15 09:12:47.784752 4 2019-11-15 09:42:47.784752 5 2019-11-15 10:22:47.784752 Day Loop SomeDatetime 0 2019-11-15 09:02:47.784752 2 2019-11-15 09:07:47.784752 3 2019-11-15 09:12:47.784752 4 2019-11-15 09:42:47.784752 5 2019-11-15 10:22:47.784752 SomeDatetime 1 2019-11-14 08:52:47.784752 和其他用户执行此操作。
评论后编辑

week

结果:

import numpy as np
import pandas as pd
from datetime import datetime, timedelta

df = pd.DataFrame(columns=['SomeDatetime', 'x', 'y'], index=[0,1,2,3,4,5])
now = datetime.now()
df.loc[0, 'SomeDatetime'] = now + timedelta(minutes = 10)
df.loc[1, 'SomeDatetime'] = now - timedelta(days = 1)
df.loc[2, 'SomeDatetime'] = now + timedelta(minutes = 15)
df.loc[3, 'SomeDatetime'] = now + timedelta(minutes = 20)
df.loc[4, 'SomeDatetime'] = now + timedelta(minutes = 50)
df.loc[5, 'SomeDatetime'] = now - timedelta(days = 30*4)  - timedelta(days = 3)

df['x'] = pd.Series(np.random.randn(6))
df['y'] = pd.Series(np.random.randn(6))

df.set_index('SomeDatetime', inplace=True)

print("Dataframe\n")
print(df)
print("\nDay Loop\n")

for date in df.index.to_series().dt.date.unique():
    print(date)
    day_value = df[df.index.to_series().dt.date == date]
    print(day_value)
    print('\n')


有帮助吗?