Вычисление процента между двумя фреймами данных, объединенными в один фрейм данных

Если у меня есть два фрейма данных (df1 и f2), и я объединяю их в один фрейм данных (df3):

df3 = pd.concat([df1, df2])

Примерные размерности df1, df2 и df3:

   df1 = (2, 1)
   df2 = (8, 1)
   df3 = (10, 1)

Я хотел бы рассчитать соответствующий процент длины df1 и df2 по сравнению с df3. Результат должен быть:

   df1 % over df3 = 20%
   df2 % over df3 = 80%

Есть ли способ сделать этот расчет в пандах? Спасибо!


person Jack_T    schedule 01.08.2020    source источник
comment
Можете ли вы предоставить образец ввода и ожидаемый результат? Создайте минимальный воспроизводимый пример   -  person Ch3steR    schedule 01.08.2020
comment
Процент чего? Число столбцов? Ряды? Один конкретный столбец?   -  person NYC Coder    schedule 01.08.2020
comment
Отредактировано! Спасибо вам!   -  person Jack_T    schedule 01.08.2020


Ответы (1)


Ты можешь сделать:

print(f"{len(df1)/len(df3):.2f}%") # 0.20%
print(f"{len(df2)/len(df3):.2f}%") # 0.80%

Здесь f соответствует f-strings.

Чтобы получить проценты, используйте ниже:

print(f"{len(df1)/len(df3):.2%}") # 20.00%
print(f"{len(df2)/len(df3):.2%}") # 80.00%

Из документов mini string language

% - Процент. Умножает число на 100 и отображает в фиксированном ('f') формате, за которым следует знак процента.

person YOLO    schedule 01.08.2020
comment
Спасибо! однако, когда я печатаю, я получаю: 0,80% и 0,20%. Как мне удалить 0, если мне нужны только 80% и 20%? - person Jack_T; 01.08.2020
comment
А также, как мне поставить. (Точку) между целыми и десятичными знаками (например, 80,00%). Ваше здоровье! - person Jack_T; 01.08.2020
comment
Спасибо! Последний вопрос: как преобразовать f-строку в целое с четырьмя десятичными знаками? Я пробовал int (f {len (df1) / len (df3) :. 2f}), но получаю сообщение об ошибке: недопустимый литерал для int () - person Jack_T; 01.08.2020
comment
@Jack_T f"{len(df1)/len(df3):.4f}" - person YOLO; 01.08.2020
comment
Спасибо за предложение. Когда я печатаю f {len (df1) / len (df3) :. 4f}, я получаю результат вроде '0.8000', и это нормально. Однако, когда я назначаю его переменной (например, p = f {len (df1) / len (df3) :. 4f} и вызываю это, я получаю эту ошибку: ValueError : недопустимый литерал для int () с основанием 10: '0.80000 - person Jack_T; 01.08.2020
comment
Я назначаю переменную, так как мне нужно будет отправить ее в функцию. Любые предложения о том, как это сделать? Благодарность! - person Jack_T; 01.08.2020
comment
@Jack_T, похоже, вы обернули строку f внутри функции int. Не делай этого. Я не вижу ошибки. - person YOLO; 02.08.2020