如何在pandas中将ctype列值转为列名后缀,实现长表转宽表操作
你可以直接使用pandas的pivot方法实现长表转宽表,操作代码如下:
# 先确认你的df中cdate、ctype组合是唯一的,直接调用pivot result = df.pivot( index="cdate", columns="ctype", values=["cval1", "cval2"] ) # 合并多层列名,生成 原列名_ctype 格式的新列名 result.columns = [f"{val_col}_{ctype}" for val_col, ctype in result.columns] # 重置索引,将cdate从索引转为普通列 result = result.reset_index()
如果你的实际数据中存在同一个cdate+ctype组合对应多条记录的情况,可以改用pivot_table指定聚合规则,示例如下(示例中用first取第一条记录的值,你可以根据需求调整为sum、mean等聚合函数):
result = df.pivot_table( index="cdate", columns="ctype", values=["cval1", "cval2"], aggfunc="first" ) # 后续合并列名、重置索引的操作和上面一致 result.columns = [f"{val_col}_{ctype}" for val_col, ctype in result.columns] result = result.reset_index()
注:你给出的预期结果里的
cval_3属于笔误,按上述代码输出的对应列名为cval1_3,和其他列命名规则统一。
内容的提问来源于stack exchange,提问作者Fluxy
相关产品推荐
相关产品推荐

