Я попытался взглянуть на какую-то ссылку, где я могу сделать дополнительный столбец, который будет категоричным на основе другого столбца.Я уже попробовал документацию pandas категорически , и переполнение стека, кажется, не имеет этого, но я думаю, что это должно быть, но, возможно, я использую неправильные поисковые теги?
например
Size Size_cat
10 0-50
50 0-50
150 50-500
450 50-500
5000 1000-9000
10000 >9000
notice that the size category 500-1000 is missing (but no number corresponds to that)
Проблема заключается в том, что я создаю кросс-таблицу панд позже, как это:
summary_table = pd.crosstab(index[res_sum["Type"],res_sum["Size"]],columns=[res_sum["Found"]],margins=True)
summary_table = summary_table.div(summary_table["All"] / 100, axis=0)
После некоторого редактирования этой таблицы я получаю такой результат:
Found Exact Near No
Type Size
DEL 50 80 20 0
100 60 40 0
500 80 20 0
1000 60 40 0
5000 40 60 0
10000 20 80 0
DEL_Total 56.666667 43.333333 0
DUP 50 0 0 100
100 0 0 100
500 0 100 0
1000 0 100 0
5000 0 100 0
10000 20 80 0
DUP_Total 3.333333 63.333333 33.333333
проблема в том, что теперь (Размер) просто помещает размеры здесь, и поэтому эта таблица может варьироваться по размеру.Если в данных отсутствует 5000-DEL, этот столбец также исчезнет, а затем DUP будет иметь 6 категорий и DEL 5. Кроме того, если я добавлю больше размеров, эта таблица станет очень большой.Поэтому я хотел создать категории размеров, но всегда сохранял одни и те же категории, даже если некоторые из них были бы пустыми.
Надеюсь, я ясен, потому что это довольно сложно объяснить.вот что я уже пробовал:
highest_size = res['Size'].max()
categories = int(math.ceil(highest_size / 100.0) * 100.0)
categories = int(categories / 10)
labels = ["{0} - {1}".format(i, i + categories) for i in range(0, highest_size, categories)]
print(highest_size)
print(categories)
print(labels)
10000
1000
['0 - 1000', '1000 - 2000', '2000 - 3000', '3000 - 4000', '4000 - 5000', '5000 - 6000', '6000 - 7000', '7000 - 8000', '8000 - 9000', '9000 - 10000']
Я получаю числовые категории, но, конечно, теперь они зависят от наибольшего числа, и категории меняются в зависимости от данных.Кроме того, мне все еще нужно связать их с колонкой «Размер» в пандах.Это не работает.
df['group'] = pd.cut(df.value, range(0, highest_size), right=False, labels=labels)
Если возможно, я бы хотел создать свои собственные категории, вместо того, чтобы использовать диапазон для выполнения тех же шагов, как я делал в первом примере выше.(в противном случае потребуется 100% с шагом 100, а при выполнении шага 1000 будет потеряно много данных в небольших регионах)