Как можно сгруппировать фрейм данных Pandas с индексом даты и времени по дате таким образом, чтобы значения, относящиеся к дате, были разделены на несколько столбцов?

#python #pandas #dataframe

Вопрос:

Рассмотрим фрейм данных:

   timestamp                                       value
0 2019-07-12 18:00:00                             8.46
1 2019-07-13 06:00:00                            12.02
2 2019-07-13 18:00:00                            15.58
3 2019-07-14 06:00:00                            16.29
4 2019-07-14 18:00:00                            17.00
 

Я хочу превратиться в:

  timestamp                               X1       X2
0 2019-07-12                             8.46     NaN
1 2019-07-13                             12.02    15.58
2 2019-07-14                             16.29    17.00
 

Как это можно сделать?

Я попробовал pd.groupby , Grouper а затем сделал цикл for, как показано ниже:

 for ix, i in resampled_df.groupby(pd.Grouper(key='timestamp', freq="1D")):
    print(i.head())
 

Не повезло!

Ответ №1:

Давайте попробуем с pivot_table :

 # Convert to datetime (if not already)
df['timestamp'] = pd.to_datetime(df['timestamp'])
# Get Series of Dates from Timestamp
dates = df['timestamp'].dt.date
df = (
    # Pivot on dates in index, and columns based on rows per group
    df.pivot_table(index=dates,
                   columns=df['value'].groupby(dates).cumcount()   1,
                   values='value')
        .add_prefix('X')  # Add X in Front of Columns
        .reset_index()  # Make dates a column
)
 

df :

     timestamp     X1     X2
0  2019-07-12   8.46    NaN
1  2019-07-13  12.02  15.58
2  2019-07-14  16.29  17.00