重新排列 pandas 中多行 headers 的数据

Rearranging data for multi line headers in pandas

我正在 pandas

中使用来自 FWI 的以下数据

我想将其转换为每个国家/地区的以下形式

我已经尝试使用 melt、stack 和 pivot 函数,但无法通过这些多行获得预期的结果 headers。 Link 数据集:https://freedomhouse.org/sites/default/files/2021-02/Country_and_Territory_Ratings_and_Statuses_FIW1973-2021.xlsx 有人可以帮忙吗?

您需要将列 headers 读取为 MultiIndex,然后 unstack 列(unstack 适用于行索引,因此您必须转置数据框)。

df = pd.read_excel('Country_and_Territory_Ratings_and_Statuses_FIW1973-2021.xlsx', 'Territory Ratings, Statuses',skiprows=1, header=[0,1], index_col=0)

这个特定 Excel table 的问题是在某些 'CL' header 名称(即它们是 'CL''CL ')。您可以通过 re-creating 索引来解决此问题,如下所示:

df.columns = pd.MultiIndex.from_arrays([df.columns.get_level_values(0),
                                        df.columns.get_level_values(1).str.strip()])

然后展开:

result = df.T.unstack(0).T