Проблема с подсчетом таблиц Python CrossPython

Программы на Python
Ответить
Anonymous
 Проблема с подсчетом таблиц Python Cross

Сообщение 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 |



Подробнее здесь: https://stackoverflow.com/questions/791 ... ount-issue
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»