重新排列 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
我正在 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