#python #pandas #dataframe
Вопрос:
Мне нужны некоторые рекомендации по вычислению частоты в кадре данных.
В принципе, мне нужно рассчитать частоту появления столбца, создав новый столбец с найденным процентом, основываясь на простом условии другого столбца:
Например:
Указатель | Col1 | … | Col9 |
---|---|---|---|
0 | a | … | 49 |
1 | a | … | 51 |
2 | b | … | 49 |
3 | b | … | 49 |
4 | c | … | 51 |
5 | c | … | 49 |
6 | c | … | 49 |
7 | c | … | 51 |
Я добавлю новый столбец в процентах, где условие будет, например (Col9 gt; 50), в зависимости от количества строк в Col1
Указатель | Col1 | … | Col9 | Процентное соотношение |
---|---|---|---|---|
0 | a | … | 49 | 50% |
1 | a | … | 51 | 50% |
2 | b | … | 49 | 0% |
3 | b | … | 49 | 0% |
4 | c | … | 51 | 25% |
5 | c | … | 49 | 25% |
6 | c | … | 49 | 25% |
7 | c | … | 49 | 25% |
- Для случая «а» Col1 (2 случая) у нас есть 50% с Col9 gt; 50.
- Для вхождения «b» Col2 (2 вхождения) у нас есть 0 с Col9 gt; 50.
- Для появления «c» Col3 (4 случая) у нас есть 25% с Col9 gt; 50.
Сложность заключается в том, чтобы пометить все строки фрейма данных в столбце «Новый процент» определенным процентом правила. Я хочу, чтобы все строки в их новом столбце процентов сообщали мне, что в определенной группе (например, «а») есть X%, которые подпадают под правило.
Некоторые параметры группировки уменьшают количество строк в моем фрейме данных, так как они подсчитываются и скрываются, чтобы не повторять отображение в процентах. Но в моем случае мне нужны все строки и столбцы.
Мне нужны все столбцы, включая процент.
df = df.sort_values(['index', 'Col1'], ascending = (True, True)) df = df.groupby(['index', 'Col1']['Col9'].apply(lambda x: (some rule like Col9 gt; 50).reset_index(name='Percentual')
Я бы упорядочил фрейм данных по «индексу» и «Col1». Но я не могу сохранить все строки и указать процент так, как я хочу.
Ответ №1:
assign
сделал бы эту работу за тебя. Важно сначала установить столбец «сводный» в качестве индекса:
import pandas as pd df = pd.DataFrame({"col1":["a", "a", "b", "b", "c", "c", "c", "c"], "col9":[49, 51, 49, 49, 51, 49, 49, 49]}) grouping_index = ["col1"] df = df.set_index(grouping_index) df = df.assign(percentage=df.groupby(grouping_index)[["col9"]].agg(lambda x: sum(xgt;50)/len(x))).reset_index()