Я пытаюсь создать перекрестную таблицу в Python для подсчета данных на основе определенных ячеек для задачи анализа данных. Моя цель — классифицировать записи по категориям расстояния и размера выборки на основе пороговых значений, а затем подсчитать количество вхождений для каждой комбинации категорий. Однако я сталкиваюсь с расхождениями между ожидаемыми и фактическими результатами.
Я хочу сгруппировать данные по расстоянию и идентификаторам магазинов, подсчитать вхождения в каждом контейнере и создать перекрестную таблицу, показывающую эти значения. Ниже приведены настройки и код, которые я использую, а также пример набора данных и ожидаемый результат.
Пример набора данных:
import pandas as pd
# Sample data for demonstration
data = {
'distance': [15, 10, 5, 95, 50, 45, 120, 220, 240, 280, 300, 400, 800, 500, 600, 1000, 900, 700, 350, 150],
'store_id': [1, 2, 3, 1, 2, 3, 1, 1, 2, 3, 2, 3, 4, 4, 5, 5, 3, 2, 1, 4],
'campaign_transaction_id': list(range(1, 21))
}
merged_data = pd.DataFrame(data)
Вот код Python, который я использовал:
import pandas as pd
# Define bins for 'distance' and sample sizes
difference_bins = [0, 21, 101, 251, 100000000]
sample_bins = [1, 6, 11, 21, 51, 201]
# Create categorical columns based on bins
merged_data['distance_category'] = pd.cut(merged_data['distance'], bins=difference_bins, labels=['0-20', '21-100', '101-250', '>250'], right=True)
# Group by 'distance_category' and 'store_id' to calculate the count for each group
merged_data['store_id_count'] = merged_data.groupby(['distance_category', 'store_id'])['campaign_transaction_id'].transform('count')
# Create a new column 'sample_size_category' based on the 'store_id_count' and bins for sample sizes
merged_data['sample_size_category'] = pd.cut(merged_data['store_id_count'], bins=sample_bins, labels=['1-5', '6-10', '11-20', '21-50', '50-200'], right=True)
# Create the cross table without calculating percentages
cross_table_count = pd.crosstab(merged_data['sample_size_category'], merged_data['distance_category'], margins=True, margins_name='Total')
print("Cross Table counts:")
print(cross_table_count)
Моя ожидаемая кросс-таблица здесь, я создаю ее вручную.
| sample_size_category | 0-20 | 21-100 | 101-250 | >250 | Grand Total |
|----------------------|------|--------|---------|------|-------------|
| 1-5 | 3 | 3 | 5 | 4 | 15 |
| 6-10 | 2 | 1 | | | 3 |
| Grand Total | 5 | 4 | 5 | 4 | 18 |
Но мой результат:
| sample_size_category | 101-250 | >250 | Total |
|----------------------|---------|------|-------|
| 1-5 | 2 | 9 | 11 |
| Total | 2 | 9 | 11 |
Подробнее здесь: https://stackoverflow.com/questions/791 ... ount-issue
Проблема с подсчетом таблиц Python Cross ⇐ Python
Программы на Python
1736112767
Anonymous
Я пытаюсь создать перекрестную таблицу в Python для подсчета данных на основе определенных ячеек для задачи анализа данных. Моя цель — классифицировать записи по категориям расстояния и размера выборки на основе пороговых значений, а затем подсчитать количество вхождений для каждой комбинации категорий. Однако я сталкиваюсь с расхождениями между ожидаемыми и фактическими результатами.
Я хочу сгруппировать данные по расстоянию и идентификаторам магазинов, подсчитать вхождения в каждом контейнере и создать перекрестную таблицу, показывающую эти значения. Ниже приведены настройки и код, которые я использую, а также пример набора данных и ожидаемый результат.
Пример набора данных:
import pandas as pd
# Sample data for demonstration
data = {
'distance': [15, 10, 5, 95, 50, 45, 120, 220, 240, 280, 300, 400, 800, 500, 600, 1000, 900, 700, 350, 150],
'store_id': [1, 2, 3, 1, 2, 3, 1, 1, 2, 3, 2, 3, 4, 4, 5, 5, 3, 2, 1, 4],
'campaign_transaction_id': list(range(1, 21))
}
merged_data = pd.DataFrame(data)
Вот код Python, который я использовал:
import pandas as pd
# Define bins for 'distance' and sample sizes
difference_bins = [0, 21, 101, 251, 100000000]
sample_bins = [1, 6, 11, 21, 51, 201]
# Create categorical columns based on bins
merged_data['distance_category'] = pd.cut(merged_data['distance'], bins=difference_bins, labels=['0-20', '21-100', '101-250', '>250'], right=True)
# Group by 'distance_category' and 'store_id' to calculate the count for each group
merged_data['store_id_count'] = merged_data.groupby(['distance_category', 'store_id'])['campaign_transaction_id'].transform('count')
# Create a new column 'sample_size_category' based on the 'store_id_count' and bins for sample sizes
merged_data['sample_size_category'] = pd.cut(merged_data['store_id_count'], bins=sample_bins, labels=['1-5', '6-10', '11-20', '21-50', '50-200'], right=True)
# Create the cross table without calculating percentages
cross_table_count = pd.crosstab(merged_data['sample_size_category'], merged_data['distance_category'], margins=True, margins_name='Total')
print("Cross Table counts:")
print(cross_table_count)
Моя ожидаемая кросс-таблица здесь, я создаю ее вручную.
| sample_size_category | 0-20 | 21-100 | 101-250 | >250 | Grand Total |
|----------------------|------|--------|---------|------|-------------|
| 1-5 | 3 | 3 | 5 | 4 | 15 |
| 6-10 | 2 | 1 | | | 3 |
| Grand Total | 5 | 4 | 5 | 4 | 18 |
Но мой результат:
| sample_size_category | 101-250 | >250 | Total |
|----------------------|---------|------|-------|
| 1-5 | 2 | 9 | 11 |
| Total | 2 | 9 | 11 |
Подробнее здесь: [url]https://stackoverflow.com/questions/79149521/python-cross-table-count-issue[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия