DDM
DDM

Reputation: 323

Iterate over unique date and hour in the pandas dataframe to run a function

Hi I am currently running a for loop through by unique dates in the dataframe to pass it to a function. However what I wanted is to iterate over the unique date and hour (e.g. 2020-12-18 15:00, 2020-12-18 16:00) through my dataframe. Is there any possible way to do this?

This is my code and a sample of my dataframe.

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)
DateTime                Values
0   2020-12-18 15:00:00 554.0
1   2020-12-18 15:00:00 594.0
2   2020-12-18 15:00:00 513.0
3   2020-12-18 16:00:00 651.0
4   2020-12-18 16:00:00 593.0
5   2020-12-18 17:00:00 521.0
6   2020-12-18 17:00:00 539.0
7   2020-12-18 17:00:00 534.0
8   2020-12-18 18:00:00 562.0
9   2020-12-19 08:00:00 511.0
10  2020-12-19 09:00:00 512.0
11  2020-12-19 09:00:00 584.0
12  2020-12-19 09:00:00 597.0
13  2020-12-22 09:00:00 585.0
14  2020-12-22 09:00:00 620.0
15  2020-12-22 09:00:00 593.0

Upvotes: 0

Views: 619

Answers (1)

jezrael
jezrael

Reputation: 863246

You can use groupby if need filter by all dates in DataFrame:

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)

EDIT: If need filter only some dates from list use:

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)

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)

Upvotes: 1

Related Questions