Pandas将DataFrame每行转为对角矩阵并拼接为多级索引DataFrame的方法
解决方案
你原有逻辑的问题是 apply 沿行处理时,会把每行返回的DataFrame作为单个元素存入结果Series,不会自动拼接为多级索引结构,改用pd.concat手动拼接即可。
完整可运行代码
import pandas as pd import numpy as np # 构造输入数据 data = pd.DataFrame( [[1,2,3],[4,5,6]], columns=['a', 'b', 'c'], index=pd.date_range('2021-11-06', '2021-11-07') ) def convert_dataframe(ser): df_ser = pd.DataFrame(0, index=ser.index, columns=ser.index) np.fill_diagonal(df_ser.values, ser) return df_ser # 拼接生成多级索引结果 result = pd.concat( {date: convert_dataframe(row) for date, row in data.iterrows()}, names=['Date'] )
输出结果
a b c Date 2021-11-06 a 1 0 0 b 0 2 0 c 0 0 3 2021-11-07 a 4 0 0 b 0 5 0 c 0 0 6
如果需要浮点类型数值,把convert_dataframe里的0改成0.0即可。
内容的提问来源于stack exchange,提问作者vpy
相关产品推荐
相关产品推荐

