#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()]