вычислить относительный процент панд - PullRequest
0 голосов
/ 22 октября 2018

Мне нужно вычислить относительный процент каждой категории с помощью панд, я знаю, что мне нужно использовать групповые, используя панд, но я немного растерялся.

Ввод:

ID | stringValue | FloatValue
A  | 'string'    | 2
A  | 'string2'   | 8
B  | 'string'    | 5

Ожидаемый результат:

ID | stringValue | FloatValue | Perc
A  | 'string'    | 2          | 20   
A  | 'string2'   | 8          | 80
B  | 'string'    | 5          | 100

Ожидаемое значение выходных групп по их идентификатору и вычислению процентов.Здесь в A у вас есть два значения 2 и 8.Так что процент должен быть 100 * 2 / (2+8) и 100 * 8 / (2+8).Для идентификатора B есть только одно значение, поэтому Perc должен быть 100

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

IIUC попробовать:

df['Perc'] = df.groupby('ID')['FloatValue'].transform(lambda x: (x/x.sum()) * 100)

# Output


   ID   stringValue FloatValue  Perc
0   A   'string'      2         20
1   A   'string2'     8         80
2   B   'string'      5        100
0 голосов
/ 22 октября 2018

Учитывая, что ваши данные - это DataFrame от pandas с именем "data", следующий код должен помочь:

data["Perc"] = data.apply(lambda x: x["FloatValue"] * 100 / data.groupby(["ID"]).sum()["FloatValue"][x["ID"]], axis=1)

Он группирует ваши элементы по идентификатору и вычисляет общую сумму FloatValue.Затем примените метод DataFrame, чтобы создать новую серию, разделив FloatValue на соответствующую групповую сумму.

0 голосов
/ 22 октября 2018

Если 5 -> 100% - это опечатка, и вы буквально просто подразумеваете, как я могу сделать мое число похожим на процент, вы можете сделать это легко.

Если вы хотите, чтобы оно было% буквально, тогдавам придется разделить на 10, и вы можете напечатать его, умножив на 100.

Если вы хотите, чтобы он был в процентах, и вы будете иметь это в виду, то сделайте наоборот и умножьте на 10.

Вы можете сделать это, просто выполнив:

df["Perc"] = df["FloatValue"] * 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...