#python #pandas
Вопрос:
У меня есть сводная таблица, которая фильтрует, сколько отчетов создается каждый месяц, и в большинстве месяцев есть некоторые отчеты, которые не создаются, поэтому они не отображаются в сводной таблице. Однако я изо всех сил пытаюсь объединить фрейм данных сводной таблицы в единый фрейм данных индекса, который содержит все отчеты, чтобы показать пустые.
current_month = pd.pivot_table(df1['Report Name'], columns='Status of Report', values='Status Count, dropna=False, fill_value=0)
pivot table example (sorry for formatting):
Status of Report | Ignore Report | Good Report | Critical Report
Report Name
UK | 1 | 5 | 1
France | 4 | 2 | 0
Germany | 2 | 1 | 0
Italy | 2 | 2 | 0
Теперь, если бы вообще не было отчетов, скажем, по Бельгии, как бы я мог добавить строку, в которой были все нули? Я попытался создать фрейм данных отчета, в котором перечислены все страны, а затем попытался объединить сводную таблицу с all_reports_df, но я постоянно получаю ошибки
all_reports = {'Report Name': ['UK', 'France', 'Germany', 'Italy', 'Belgium']}
all_reports_df = pd.Dataframe(all_reports)
all_reports_df.join(current_month, on='Report Name', how='left')
Это соединение не вносит изменений в all_reports_df. Любая помощь была бы очень признательна
Комментарии:
1. Ваш вопрос решен? если это так, то попробуйте рассмотреть возможность принятия , чтобы сообщить другим, что проблема решена. Если нет, вы можете предоставить обратную связь, чтобы ответ можно было улучшить (или вообще удалить).
Ответ №1:
попробуйте через reindex()
:
df=(df.set_index('Status of Report')
.reindex(['UK', 'France', 'Germany', 'Italy', 'Belgium'])
.reset_index()
.fillna(df).fillna(0))
или
Если есть только 1 запись, то вы можете попробовать:
df.loc[len(df)]=['Belgium',0,0,0]
или
через merge()
:
all_reports = {'Status of Report': ['UK', 'France', 'Germany', 'Italy', 'Belgium']}
all_reports_df = pd.DataFrame(all_reports)
df=all_reports_df.merge(df,how='left').fillna(df).fillna(0)