Pandas:使用转置后旧索引名称在使用 dataFrame.index.set_names 时不会消失

Pandas: After using transpose old index name does not vanish when using dataFrame.index.set_names

转置具有命名索引的 pandas Dataframe 时,先前的索引名称(对于第一列中的索引)显示为列名称的第一个条目。

示例: 原始 DataFrame df_1

1800 1801 1802
country
Germany 38.4 38.4 38.4
df_2 = df_1.T

df_2 是

country Germany
1800 38.4
1801 38.4
1802 38.4

第一个问题。为什么国家现在是 1800、1801 等的指数,有没有更好的 转置选项以避免这种情况?

尝试重命名索引时

df_2.index.set_names(["year"],inplace=True)

显示如下结果

country Germany
year
1800 38.4
1801 38.4
1802 38.4

问题二。为什么国家仍然存在以及如何删除它?

国家是df_1索引的名称,您可以查看:

df_check = df_1.rename_axis(columns=['year'], index=['country'])
print(df_check.index.name, df_check.columns.name)

所以你可以这样做:

df_1 = df_1.rename_axis(index=None)

First question. Why is country now the index for 1800, 1801 etc. and is there a better tranpose option to avoid this?

'country'是列轴的名称/标签,因为它是转置前DataFrame的索引名称。

df_2.index.set_names(["year"],inplace=True)

Question two. Why is country still there and how to remove it?

因为你只是在改变转置DataFrame的索引名称。列轴的名称('country')保持不变。

删除方法:

您可以使用DataFrame.rename_axis同时更改两个轴(索引和列)的名称。如果要删除给定轴的名称,只需传递 None.

例如,

# or df_2 = df1.T.rename_axis(index='year', columns=None) if you prefer
>>> df_2 = df_1.rename_axis(index=None, columns='year').T
>>> df_2

      Germany
year         
1800     38.4
1801     38.4
1802     38.4