Я пытаюсь описать столбцы A, B средним, медианным, 25-м процентилем, 75-м процентили, стандартным отклонением.Pandas pivot_table percentile
df = pd.DataFrame({'A':[1,9,3,4,6,8,2,7],
'B':[2,4,7,8,9,2,5,6],
'S':['L','L','L','S','L','S','S','L']})
Вот что я сделал, и это сработало, так как я только 25-й процентиль:
df.pivot_table(columns = ['S'], values = ['A','B'], aggfunc = [np.mean, lambda x: np.percentile(x,25), np.median, np.std])
Но если я поставил 75-й процентиль в, он дает мне сообщение об ошибке:
Reindexing only valid with uniquely valued Index objects
В идеале я хотел бы, чтобы в выходном списке появился 75-й процентиль в следующих столбцах.
Как я прокомментировал ответ @ SteveMisuta - исходная ошибка возникает, потому что у вас есть две лямбда-функции, каждая из которых получает неявное имя «лямбда» в выходных столбцах. Конкретная переиндексация, необходимая для стержня, не будет работать с дублирующимися именами. Простое переименование одной или обеих лямбда-функций решит ее. Вы также можете рассмотреть возможность использования аргумента 'functools.partial' для аргументов карри. – ely
@ Mr.F Что вы подразумеваете под «просто переименованием лямбда-функций»? Вы имеете в виду их замену? или называя их в кортеже вроде (75-й), лямбда x: np.percentile (x, 75))? Я попробовал последнего и не работал для меня. Есть ли другой способ «переименовать лямбда-функции»? Благодарю. –
В Python объект функции имеет атрибут '__name__'. Обычно это имя функции, которое вы выбираете (т. Е. Вещь, следующая за 'def'). Для 'lambda', очевидно, нет имени, поэтому имя просто' '. Вы можете определить одну или обе функции как отдельные 'lambda', связанные с именем, например 'foo = lambda x: ...', а затем установить 'foo .__ name__' или определить' lambda's not как 'lambda', но как обычные функции Python, как в вашем ответе, и в этом случае их' __name__' будет установлено автоматически. –
ely