У меня в прошлом были объединенные результаты кросс-таблицы с моими данными без проблем, но сегодня это не что иное, как ошибки и разочарования.
У меня есть такой список:
TID PL Amount Category
--- -- ------ --------
1 A 10 Hardware
1 B 15 Software
2 C 50 Service
Я используюct = pd.crosstab(data['TID'], columns=data['Category'], values=data['Amount'], aggfunc='sum').fillna(0)
и получить
Category Hardware Software Support
TID
-------- -------- -------- -------
1 10.0 15.0 0.0
2 0.0 0.0 50.0
Затем я объединяю свои учетные записи:
TID Name
--- ----
1 This
2 That
с pd.merge(accounts, ct, on="TID", how="left")
и получаю ожидаемый результат:
TID Name Hardware Software Support
--- ---- -------- -------- -------
1 This 10.0 15.0 0.0
2 That 0.0 0.0 50.0
Это работаетв записной книжке Jupyter без проблем.
К сожалению, в реальном файле (полном проприетарных данных) fillna(0)
в кросс-таблице не заменяет NaN, поэтому мне нужно вручную запустить fillna
вСтолбцы «Оборудование», «Программное обеспечение» и «Поддержка». Затем, когда я пытаюсь получить итоговый столбец data['Total'] = data['Hardware'] + data['Software'] + data['Services']
, я получаю ошибку length of values does not match length of index
.
Если я использую margins
и margins_name
параметры crosstab
, я получаю ошибку во время слияния:
You are trying to merge on int64 and object columns. If you wish to proceed you should use pd.concat
Я не могу понять, как преобразовать индекс кросс-таблицы как int64.
Я не могу понять, как сгладить кросс-таблицу в обычный фрейм данных сстолбцы 'TID', 'Name', 'Hardware', 'Software', 'Service', 'Total'
. reset_index
выглядит правильно, но тогда я все еще не могу привести этот столбец как int64 и выполнить объединение.
Есть предложения? Обидно, что я не могу воспроизвести эту ошибку за пределами моего кода.