目的如题目,长宽表格转换,即长表格转换为宽表格/宽表格转换为长表格,采用pivot和melt函数操作。关于该方法和stack和unstack的区别可以查看Python Pandas DataFrame stack(), unstack(), pivot(), melt()操作
1. 首先是长表格转变为宽表格,采用pivot方法
import pandas as pd
df = pd.read_csv('file.csv', header=0, encoding="utf-8")
df = df[['city', 'indus', 'rca']]
df.head(5)
Out[24]:
city indus rca
0 七台河市 农、林、牧、渔专用机械制造 14.065711
1 七台河市 其他未列明制造业 3.319898
2 七台河市 其他农副食品加工 5.008873
3 七台河市 屠宰及肉类加工 4.169150
4 七台河市 谷物磨制 11.849164
原始数据如下,想要得到city作为行,indus作为列,rca作为值的矩阵,操作如下,
df_wide = df.pivot(index='city', columns='indus', values='rca')
df_wide.head(5)
Out[27]:
indus 专用仪器仪表制造 专用化学产品制造 专用设备修理 ... 饲料加工 麻纺织及染整精加工 黑色金属铸造
city ...
七台河市 NaN NaN NaN ... NaN NaN NaN
三亚市 NaN NaN NaN ... NaN NaN NaN
三明市 NaN 0.910718 NaN ... NaN NaN 4.251723
三门峡市 NaN 2.558684 14.563470 ... NaN NaN NaN
上海市 NaN 0.047433 0.809939 ... 0.10094 NaN NaN
[5 rows x 175 columns]
通用范式为 df.pivot(index='index_label', columns='column_label', values='value_label')
2. 其次是宽表格变为长表格,采用melt方法
针对上述的df,操作如下
df_long = df.melt(id_vars=['city'],value_vars=['rca'])
df_long.head(5)
Out[33]:
city variable value
0 七台河市 rca 14.065711
1 七台河市 rca 3.319898
2 七台河市 rca 5.008873
3 七台河市 rca 4.169150
4 七台河市 rca 11.849164
可以看出,最后的dataframe的列的值是原来的column的具体数值。
今日份水文完毕,主要目的是为了第一个长转宽。
