pandas 如何将数据框转换为不同的视图?

b91juud3  于 2022-12-28  发布在  其他
关注(0)|答案(3)|浏览(174)

例如,我们有不同年份城市和城市人口的数据。
| 城市|二○ ○ ○年|二○ ○五年|二○一○年|二〇一五年|
| - ------|- ------|- ------|- ------|- ------|
| 城市_1|十个|十一|十二|十三|
| 城市_2|十五|十四|十三|十二|
| 城市_3|二十个|三十|二十五|三十五|
我需要以这种形式获取DataFrame:
| 城市|年份|人口|
| - ------|- ------|- ------|
| 城市_1|二○ ○ ○年|十个|
| 城市_1|二○ ○五年|十一|
| 城市_1|二○一○年|十二|
| 城市_1|二〇一五年|十三|
| 城市_2|二○ ○ ○年|十五|
| 城市_2|二○ ○五年|十四|
| 城市_2|二○一○年|十三|
| 城市_2|二〇一五年|十二|
| 城市_3|二○ ○ ○年|二十个|
| 城市_3|二○ ○五年|三十|
| 城市_3|二○一○年|二十五|
| 城市_3|二〇一五年|三十五|

如何使用Python来实现这一点?

uz75evzq

uz75evzq1#

只需使用pandas.melt(),然后(按照您的意愿)按城市对结果进行排序:
此函数可用于将DataFrame转换为一种格式,其中一个或多个列是标识符变量(id_vars),而所有其他列(被视为测量变量(value_vars))"取消透视"到行轴,只留下两个非标识符列,"variable"和"value"。

import pandas as pd

df = pd.read_csv('csv.csv')
df = pd.melt(df, id_vars=['City'], var_name='Year', value_name='Population')
df = df.sort_values('City').set_index('City') # Sort `City` values so that they go together and set the index back to `City`
print(df)
Year  Population
City                    
City_1  2000          10
City_1  2005          11
City_1  2010          12
City_1  2015          13
City_2  2000          15
City_2  2005          14
City_2  2010          13
City_2  2015          12
City_3  2000          20
City_3  2005          30
City_3  2010          25
City_3  2015          35
4c8rllxm

4c8rllxm2#

我认为你正在寻找融化功能,它基本上是一个反向透视,将你的数据转换成一个宽长格式。

df_unpivoted = df.melt(id_vars=['City'], var_name='Year', value_name='Population')
print(df_unpivoted)

如果您想了解更多信息,可以阅读此处的文档。
https://pandas.pydata.org/docs/reference/api/pandas.melt.html

kxe2p93d

kxe2p93d3#

    • 取消堆叠**:
df.set_index('City').unstack().reset_index().sort_values(by='City')

输出:

level_0   City    0
0   2000    City_1  10
3   2005    City_1  11
6   2010    City_1  12
9   2015    City_1  13
1   2000    City_2  15
4   2005    City_2  14
7   2010    City_2  13
10  2015    City_2  12
2   2000    City_3  20
5   2005    City_3  30
8   2010    City_3  25
11  2015    City_3  35

相关问题