Python 3.x 在数据帧中迭代唯一的日期和时间以运行函数

Python 3.x 在数据帧中迭代唯一的日期和时间以运行函数,python-3.x,pandas,datetime,time-series,Python 3.x,Pandas,Datetime,Time Series,嗨,我目前正在运行一个for循环,通过数据帧中的唯一日期将其传递给函数。 然而,我想要的是通过我的数据帧迭代唯一的日期和时间(例如2020-12-18 15:00、2020-12-18 16:00)。有什么可能的方法可以做到这一点吗 这是我的代码和数据帧的示例 for day in df['DateTime'].dt.day.unique(): testdf = df[df['DateTime'].dt.day == day] testdf.set_index('DateTime

嗨,我目前正在运行一个for循环,通过数据帧中的唯一日期将其传递给函数。 然而,我想要的是通过我的数据帧迭代唯一的日期和时间(例如2020-12-18 15:00、2020-12-18 16:00)。有什么可能的方法可以做到这一点吗

这是我的代码和数据帧的示例

for day in df['DateTime'].dt.day.unique():
    testdf = df[df['DateTime'].dt.day == day]
    testdf.set_index('DateTimeStarted', inplace=True)
    output = mk.original_test(testdf, alpha =0.05)
    output_df = pd.DataFrame(output).T
    output_df.rename({0:"Trend", 1: "h", 2:"p", 3:"z", 4:"Tau", 5:"s", 6:"var_s", 7:"slope", 8:"intercept"}, axis = 1, inplace = True)
    result_df = result_df.append(output_df)

如果需要按数据框中的所有日期筛选,可以使用
groupby

for day, testdf in df.groupby('DateTime'):
    testdf.set_index('DateTimeStarted', inplace=True)
    output = mk.original_test(testdf, alpha =0.05)
    output_df = pd.DataFrame(output).T
    output_df.rename({0:"Trend", 1: "h", 2:"p", 3:"z", 4:"Tau", 5:"s", 6:"var_s", 7:"slope", 8:"intercept"}, axis = 1, inplace = True)
    result_df = result_df.append(output_df)
编辑:如果需要,仅从列表中筛选一些日期,请使用:

for date in ['2020-12-18 15:00', '2020-12-18 16:00']:
    testdf = df[df['DateTime'] == date]
    testdf.set_index('DateTimeStarted', inplace=True)
    output = mk.original_test(testdf, alpha =0.05)
    output_df = pd.DataFrame(output).T
    output_df.rename({0:"Trend", 1: "h", 2:"p", 3:"z", 4:"Tau", 5:"s", 6:"var_s", 7:"slope", 8:"intercept"}, axis = 1, inplace = True)
    result_df = result_df.append(output_df)
编辑1:

for date in df['DateTime']:
    testdf = df[df['DateTime'] == date]
    testdf.set_index('DateTimeStarted', inplace=True)
    output = mk.original_test(testdf, alpha =0.05)
    output_df = pd.DataFrame(output).T
    output_df.rename({0:"Trend", 1: "h", 2:"p", 3:"z", 4:"Tau", 5:"s", 6:"var_s", 7:"slope", 8:"intercept"}, axis = 1, inplace = True)
    result_df = result_df.append(output_df)

所以只需删除2次
.dt.day
?对不起,我没有真正理解你的意思。实际的数据帧有两个以上的日期。这里显示的只是一个样本,我认为在你的解决方案中应该删除
.dt.day
提到的解决方案是好的,尽管尝试过,但不起作用。发生的情况是,它将包括不在数据框中的日期或小时,并在我运行该函数时返回一个错误。@DanielChang-因此需要编辑的答案?但编辑的答案不是我想要的,因为我们需要硬编码日期和时间['2020-12-18 15:00','2020-12-18 16:00']。我在寻找一个答案,可以适用于任何独特的日期和时间time@DanielChang-因此需要
EDIT1
如评论中所述吗?我刚刚评估了我的数据集,我得到的错误是由于数据集在某些日期时间段只有一个数据点,因此我得到了错误。你的代码运行得很好。
for date in df['DateTime']:
    testdf = df[df['DateTime'] == date]
    testdf.set_index('DateTimeStarted', inplace=True)
    output = mk.original_test(testdf, alpha =0.05)
    output_df = pd.DataFrame(output).T
    output_df.rename({0:"Trend", 1: "h", 2:"p", 3:"z", 4:"Tau", 5:"s", 6:"var_s", 7:"slope", 8:"intercept"}, axis = 1, inplace = True)
    result_df = result_df.append(output_df)