如何将DataFrame的行、列索引拼接生成新的DataFrame?
解决方案:将宽格式DataFrame转换为带连接索引的长格式
构造原始DataFrame
先还原你提供的原始数据:
import pandas as pd df = pd.DataFrame( [[0, 0.43, 0.61], [0.88, 0, 0.12], [0.33, 0.95, 0]], index=[1,2,3], columns=[1,2,3] )
方法一:使用stack()(推荐,更简洁)
利用stack()将列索引转为行索引,再处理连接字段:
# 堆叠转换为长格式,重置索引 stacked = df.stack().reset_index() # 拼接原行索引和列名得到Link列 stacked['Link'] = stacked['level_0'].astype(str) + '_' + stacked['level_1'].astype(str) # 调整列名和顺序 result = stacked.rename(columns={0: 'Value'})[['Link', 'Value']]
方法二:使用melt()
如果更习惯用melt做宽转长,也可以这样实现:
# 先把原索引转为普通列,再用melt转换 melted = df.reset_index().melt(id_vars='index', var_name='col', value_name='Value') # 拼接得到Link列 melted['Link'] = melted['index'].astype(str) + '_' + melted['col'].astype(str) # 筛选需要的列 result = melted[['Link', 'Value']]
最终结果
执行上述任意方法后,result就是你想要的格式:
Link Value 0 1_1 0.00 1 1_2 0.43 2 1_3 0.61 3 2_1 0.88 4 2_2 0.00 5 2_3 0.12 6 3_1 0.33 7 3_2 0.95 8 3_3 0.00
内容的提问来源于stack exchange,提问作者Laura
相关产品推荐
相关产品推荐

