Как преобразовать строковое значение фрейма данных с помощью Python

#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, не стесняйтесь менять, если не в порядке. 😉