如何高效重构DataFrame:将多列因子列转换为单列因子结构
高效重构DataFrame的解决方案
嘿,这个需求其实是典型的宽表转长表操作,用pandas的melt()方法就能高效搞定,一步到位!
具体实现步骤
- 先确认你已经导入了pandas库
- 使用
melt()函数,指定几个关键参数:id_vars:设置不需要转换的列(也就是你的Clone ID和Sequence)value_vars:指定需要被“展开”的Factor系列列(Factor_1、Factor_2、Factor_3)var_name:设置展开后存放原列名的新列名(对应你的Factor)value_name:设置展开后存放原数值的新列名(对应你的Factor_population)
完整代码示例
import pandas as pd # 构造你提供的示例数据 df = pd.DataFrame({ 'Clone ID': ['clonename', 'clonename2'], 'Sequence': ['seq_data', 'seq_data2'], 'Factor_1': [1, 2], 'Factor_2': [5, 1], 'Factor_3': [4, 3] }) # 执行重构操作 melted_df = df.melt( id_vars=['Clone ID', 'Sequence'], value_vars=['Factor_1', 'Factor_2', 'Factor_3'], var_name='Factor', value_name='Factor_population' ) # 查看结果 print(melted_df)
运行结果
Clone ID Sequence Factor Factor_population 0 clonename seq_data Factor_1 1 1 clonename2 seq_data2 Factor_1 2 2 clonename seq_data Factor_2 5 3 clonename2 seq_data2 Factor_2 1 4 clonename seq_data Factor_3 4 5 clonename2 seq_data2 Factor_3 3
进阶小技巧
如果你的Factor列特别多(比如Factor_1到Factor_100),不用手动列全所有列名,可以用df.filter(like='Factor_')自动筛选,代码会更简洁:
melted_df = df.melt( id_vars=['Clone ID', 'Sequence'], value_vars=df.filter(like='Factor_').columns, var_name='Factor', value_name='Factor_population' )
这样不管你有多少个Factor列,都能一键完成转换,效率拉满!
内容的提问来源于stack exchange,提问作者404
相关产品推荐
相关产品推荐

