如何使用Python完成指定DataFrame宽表转长表的转换需求?
Python表格转换实现方案
这个需求属于典型的宽表转长表场景,用pandas的melt方法可以快速实现,无需手写循环拆分逻辑。
依赖安装
如果环境还没装pandas,先执行安装命令:pip install pandas
完整实现代码
import pandas as pd def transform_follower_data(raw_df): # 核心转换:将粉丝数值列拆分为多行 melted_df = raw_df.melt( # 保留不需要拆分的公共字段 id_vars=['org', 'start date', 'stop date'], # 指定要拆分的两个粉丝数值字段 value_vars=['organic follower', 'paid follower'], # 拆分后生成的类型字段名 var_name='Follower Type', # 拆分后生成的数值字段名 value_name='Follower Count' ) # 格式化Follower Type的取值为要求的格式 melted_df['Follower Type'] = melted_df['Follower Type'].replace({ 'organic follower': 'organic', 'paid follower': 'paid' }) # 调整字段顺序和需求要求完全一致 melted_df = melted_df[['org', 'start date', 'stop date', 'Follower Type', 'Follower Count']] return melted_df # 本地测试示例 if __name__ == "__main__": # 构造示例原始数据(对应提到的2条org为One的记录) test_raw_data = [ {'org': 'One', 'organic follower': 1200, 'paid follower': 300, 'start date': '2024-01-01', 'stop date': '2024-01-31'}, {'org': 'One', 'organic follower': 1500, 'paid follower': 450, 'start date': '2024-02-01', 'stop date': '2024-02-29'} ] raw_df = pd.DataFrame(test_raw_data) result_df = transform_follower_data(raw_df) # 打印结果验证 print(result_df)
补充说明
- 运行测试代码后输出的结果就是要求的格式,每条原始记录会拆分为organic、paid对应的两条记录,字段完全匹配需求。
- 如果需要过滤粉丝数为空的无效记录,可以在转换逻辑最后添加
melted_df = melted_df.dropna(subset=['Follower Count'])即可。
内容的提问来源于stack exchange,提问作者Krouse
相关产品推荐
相关产品推荐

