写论文的时候总是面临长型数据转面板数据,stata reshape long 会在奇怪的地方出问题,可以使用python来复现这个操作:
-
long型数据
-
代码
import pandas as pd
import re
'''数据清洗'''
data = pd.read_excel("C:/Desktop/港股企业.xlsx")
data1 = data.set_index(['证券名称'])
data2 = data1.stack().reset_index()
data2.columns = ['证券名称', '年份', '指标']
data2['年'] = data2['年份'].str.extract(r'(\d{4})')
data2.rename(columns={'年份':'指标名称'}, inplace=True)
print(data2.head(30))
# 根据 "证券名称" 进行切片
sliced_groups = data2.groupby('证券名称')
# 初始化空列表用于存放每个切片内的数据
sliced_data = []
# 在每个切片内进行进一步分组和合并
for name, group in sliced_groups:
# 去掉指标名称中的数字
group['指标名称'] = group['指标名称'].apply(lambda x: re.sub(r'\d+', '', x))
sub_grouped = group.groupby('指标名称')
# 保留指标名称和指标之间的对应关系
index_mapping = {name: sub_group.reset_index(drop=True)['指标'] for name, sub_group in sub_grouped}
# 存放原始指标名称和新列名的对应关系
column_mapping = {orig_name: new_name for new_name, orig_name in enumerate(group['指标名称'].unique())}
# 合并数据,并根据对应关系修改列名
merged_data = pd.concat(
[sub_group.set_index(['证券名称', '年'])['指标'] for
name, sub_group in sub_grouped],
axis=1)
# 修改列名为对应的 '指标名称'
merged_data.columns = index_mapping.keys()
sliced_data.append(merged_data)
# 对根据“证券名称”切片好的组进行合并
final_merged_data = pd.concat(sliced_data, axis=0)
初学者,还望指正,感谢!