如何使用Pandas按bundle id分组CSV文件并为指定表头加前缀?
用Pandas实现CSV数据的分组与表头重命名需求
完全可以用Pandas实现你的需求,以下是具体的实现步骤和代码示例:
步骤1:导入Pandas并读取CSV文件
首先导入Pandas库,然后读取你的CSV数据文件:
import pandas as pd # 替换为你的CSV文件路径 df = pd.read_csv("your_data.csv")
步骤2:处理表头前缀(source为'a'的情况)
假设你的数据包含bundle_id、source以及其他数据列(如value1、value2等),我们需要为source='a'对应的非标识列添加seed_前缀。可以通过将数据拆分为子集处理后再合并:
# 筛选source为'a'的数据并复制 df_seed = df[df["source"] == "a"].copy() # 为除bundle_id和source外的列添加前缀 df_seed.columns = [ f"seed_{col}" if col not in ["bundle_id", "source"] else col for col in df_seed.columns ] # 筛选其他source的数据 df_other = df[df["source"] != "a"].copy()
步骤3:按bundle_id分组合并数据
将处理后的两个子集按bundle_id合并,得到最终的分组结果(这里采用外连接保证所有bundle_id都被保留):
# 按bundle_id合并数据 final_df = pd.merge(df_other, df_seed, on="bundle_id", how="outer") # 如果需要将同一bundle_id的行聚合为单行(比如取第一个非空值),可以用groupby final_df = final_df.groupby("bundle_id").first().reset_index()
可选:用透视表实现宽表转换
如果你的原始数据是长格式(每行对应一个bundle_id+source+指标的组合),可以用透视表更简洁地实现需求:
# 将数据转换为长格式 df_long = df.melt(id_vars=["bundle_id", "source"], var_name="metric", value_name="value") # 为source='a'的指标添加前缀 df_long["metric"] = df_long.apply( lambda row: f"seed_{row['metric']}" if row["source"] == "a" else row["metric"], axis=1 ) # 转回宽格式并按bundle_id分组 final_df = df_long.pivot_table( index="bundle_id", columns="metric", values="value", aggfunc="first" ).reset_index()
运行上述代码后,final_df就是符合你要求的输出结果。
内容的提问来源于stack exchange,提问作者Gururaj B R
相关产品推荐
相关产品推荐

