Кадр данных от длинного к широкому с использованием двух столбцов в качестве переменных

Большинство решений выше работают только для одного поля таблицы, вам может понадобиться получить средний (50-й процентиль) для многих полей в запросе.

Я использую это:

SELECT CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(
 GROUP_CONCAT(field_name ORDER BY field_name SEPARATOR ','),
  ',', 50/100 * COUNT(*) + 1), ',', -1) AS DECIMAL) AS `Median`
FROM table_name;

Вы можете заменить «50» в примере выше на любой процентиль, очень эффективно.

Просто убедитесь, что вы у вас достаточно памяти для GROUP_CONCAT, вы можете изменить ее с помощью:

SET group_concat_max_len = 10485760; #10MB max length

Подробнее: http://web.performancerasta.com/metrics-tips-calculating-95th-99th-or -любой-процентиль-с-одной MySQL-запрос /

1
задан oceanbeach96 19 March 2019 в 08:00
поделиться

1 ответ

Сначала соедините столбцы вместе, затем DataFrame.set_index с параметром append=True и измените форму на Series.unstack :

s = df['port1'].astype(str) + df['port2'].astype(str)
df = df.set_index(s, append=True)['w_ret'].unstack()
print (df)
              0.00.0    0.01.0    1.00.0    1.01.0
date                                              
2006-01-01  0.067991  0.033219  0.073324  0.039730
2006-01-02  0.033616  0.022452 -0.024854  0.020411
0
ответ дан jezrael 19 March 2019 в 08:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: