#python-3.x #pandas #dataframe
#python-3.x #pandas #фрейм данных
Вопрос:
у меня возникли некоторые проблемы с Pivot (похоже, Pivot в Excel). я пробовал это так много раз, но понятия не имею. Пожалуйста, кто-нибудь, помогите мне.
Ниже приведен пример данных.
Date report Result
01/11/2020 Achieved
01/11/2020 Achieved
02/11/2020 Failed
02/11/2020 Failed
02/11/2020 Achieved
03/11/2020 Achieved
Затем результат, который мне нужно сделать, как показано ниже
Date report Result
01/11/2020 100.00%
02/11/2020 33.33%
03/11/2020 100.00%
Примечание: процентный результат получен из Countif(‘Отчет о дате’ и ‘Достигнутый’) / Countif(‘Отчет о дате’)
Ответ №1:
Сравните значения Achieved
с Series.eq
помощью, агрегируйте mean
, кратно 100
и преобразуйте в проценты:
df1 = (df['Result'].eq('Achieved')
.groupby(df['Date report'])
.mean()
.mul(100)
.round(2)
.astype(str)
.add('%')
.reset_index())
print (df1)
Date report Result
0 01/11/2020 100.0%
1 02/11/2020 33.33%
2 03/11/2020 100.0%
Еще одна идея, спасибо @Chester:
df1 = (df['Result'].eq('Achieved')
.groupby(df['Date report'])
.mean()
.map('{:.2%}'.format)
.reset_index())
print (df1)
'{:.num%}'
гдеnum
точность после десятичной точки, читайте оmini string language
Комментарии:
1. Аналогичная идея,
df['Result'].eq('Achieved').groupby(df['Date report']).mean().map('{:.2%}'.format)
но с использованием языка мини-строк2. Добавлено несколько dets, не стесняйтесь менять, если не в порядке. 😉