Это образец DataFrame, над которым я работаю:
import pandas as pd
import numpy as np
from scipy.stats import zscore
df = pd.DataFrame(
index=pd.MultiIndex.from_tuples(
[('Monday', '2019-11-04'),('Monday', '2019-11-11'), ('Monday', '2019-11-18'),
('Tuesday', '2019-11-05'), ('Tuesday', '2019-11-12'), ('Tuesday', '2019-11-19'),
('Wednesday', '2019-11-06'), ('Wednesday', '2019-11-13'), ('Wednesday', '2019-11-20'),
( 'Thursday', '2019-11-07'), ('Thursday', '2019-11-14'), ('Thursday', '2019-11-21'),
('Friday', '2019-11-01'), ('Friday', '2019-11-08'), ('Friday', '2019-11-15'),
('Saturday', '2019-11-02'), ('Saturday', '2019-11-09'), ('Saturday', '2019-11-16'),
('Sunday', '2019-11-03'), ('Sunday', '2019-11-10'), ('Sunday', '2019-11-17')]),
data={'A': [363287, 348759, 295711, 346276, 350785, 292794, 328048, 315418,
303901, 324330, 302850, 308500, 415665, 324196, 289739, 444184,
361214, 359573, 436543, 375668, 379184],
'B': [263641, 293827, 272811, 267064, 307886, 269061, 266336, 292442,
273714, 268377, 278113, 270378, 268556, 274989, 268869, 312046,
321059, 322694, 323546, 332234, 333341],
'C': [263678, 293870, 272855, 267092, 307931, 269114, 266378, 292488,
273769, 268426, 278156, 270422, 268602, 275021, 268906, 312084,
321116, 322741, 323602, 332298, 333405]})
Сейчас я получаю zscore для каждое значение в каждом столбце, применяя scipy.stats.zscore
к каждому столбцу с a для l oop:
for col in df.columns:
df[col] = zscore(df[col])
Вместо учета всех чисел в каждом столбце при применении функции zscore, как я могу сгруппировать по первый уровень индекса (день недели) до применения функции? Например, я хотел бы применить функцию сначала к значениям в df.loc[('Monday'), 'A']
, а затем df.loc[('Tuesday'), 'A']
и т. Д.
Кроме того, есть ли способ сделать это таким образом, чтобы не включать добавление подмножества DataFrame в список, а затем объединить их после их обработки.
Спасибо!