найти стандартное отклонение в стеке для специальных строк

#python #pandas

#python #pandas

Вопрос:

У меня есть следующий стек, я должен найти месяц, когда A имеет наименьшее стандартное отклонение для AAPL

                     A   
Date                        
2000-07-03  AAPL    3.290673    
            ADBE    31.756767       
            ADI     54.067356
2000-07-04  AAPL    6.660673    
            ADBE    71.956767       
            ADI     44.767356   
2020-08-07  AAPL    210.399994  
            ADBE    24.88
            ADI     55.09
2020-08-17  AAPL    329.399994  
            ADBE    64.88
            ADI     99.09
2020-09-10  AAPL    70.39
            ADBE    14.81
            ADI     65.69
2020-09-20  AAPL    140.39
            ADBE    83.51
            ADI     57.69
  

Комментарии:

1. df[df.index.get_level_values(1) == 'AAPL'].min() ?

2. Как вы определяете стандартное отклонение для одного единственного числа?

3. @MohammadJafarMashhadi Стандартное отклонение должно быть рассчитано по датам для APPL

4. @Khaned вы уверены, что у вас есть мультииндекс?

5. @Khaned пожалуйста, предоставьте ожидаемый результат

Ответ №1:

 # sample data
s = """Date,Stock,A
7/3/2000,AAPL,3.290673
7/3/2000,ADBE,31.756767
7/3/2000,ADI,54.067356
7/4/2000,AAPL,6.660673
7/4/2000,ADBE,71.956767
7/4/2000,ADI,44.767356
8/7/2020,AAPL,210.399994
8/7/2020,ADBE,24.88
8/7/2020,ADI,55.09
8/17/2020,AAPL,329.399994
8/17/2020,ADBE,64.88
8/17/2020,ADI,99.09
9/10/2020,AAPL,70.39
9/10/2020,ADBE,14.81
9/10/2020,ADI,65.69
9/20/2020,AAPL,140.39
9/20/2020,ADBE,83.51
9/20/2020,ADI,57.69
"""
df = pd.read_csv(StringIO(s))

# convert to datetime
df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index(['Date', 'Stock'])

# filter frame and reset the index
f = df[df.index.get_level_values(1) == 'AAPL'].reset_index()
# groupby month and year and calc the std of each group
std = f.groupby([f['Date'].dt.month, f['Date'].dt.year])['A'].std()
# return the index of the min std
std.idxmin()

# output is below, which is the month and the year of the lowest std
# (7, 2000)
  

Или, если вы хотите повторно запустить изменение ряда std.idxmin() на std[std == std.min()]