Python中pandas DataFrame如何实现列转行(宽表转长表)?
实现方案
你可以直接使用pandas内置的melt函数完成逆透视(列转行)操作,这是处理这类需求最简洁的方法:
完整代码
import pandas as pd # 构造示例数据 data = [['0092', 'ab', '0', '1', '2'], ['887', 'cd', '4', '2', '1'], ['776', 'ef', '2', '1', '3'] ] df = pd.DataFrame(data, columns = ('id', 'name', 'W', 'S', 'O')) # 列转行操作 long_df = df.melt( id_vars=['id', 'name'], # 保留不需要转换的固定列 value_vars=['W', 'S', 'O'], # 指定需要转为行的列 var_name='div', # 存储原列名的新列名 value_name='category' # 存储原列对应值的新列名 ) # 可选步骤:保持和示例输出完全一致的行顺序 long_df = long_df.sort_values(by=['id', 'name']).reset_index(drop=True) print(long_df)
输出结果验证
运行后得到的结果和需求完全匹配:
id name category div 0 0092 ab 0 W 1 0092 ab 1 S 2 0092 ab 2 O 3 887 cd 4 W 4 887 cd 2 S 5 887 cd 1 O 6 776 ef 2 W 7 776 ef 1 S 8 776 ef 3 O
内容的提问来源于stack exchange,提问作者KReEd
相关产品推荐
相关产品推荐

