如何对Pandas DataFrame按单列分组、按另一列转置生成组合数据列
解决方案
分两种场景实现你的需求:
场景1:原始数据中Timestamp+col_1组合唯一(同一个日期下无重复的col_1条目)
直接用pivot转换后调整列名即可,示例代码如下:
import pandas as pd # 示例数据构造,你可以替换成自己的df data = { 'col_1': ['aaa', 'abb', 'acc', 'aaa', 'abb', 'acc'], 'Timestamp': ['22/12/2001', '22/12/2001', '22/12/2001', '23/12/2001', '23/12/2001', '23/12/2001'], 'data_1': [0.21, 0.20, 0.12, 0.23, 0.32, 0.52], 'data_2': [0.2, 0, 0.19, 0.21, 0.18, 0.20] } df = pd.DataFrame(data) # 执行pivot转换 pivot_df = df.pivot(index='Timestamp', columns='col_1', values=['data_1', 'data_2']) # 合并多层列名为你需要的「col_1值_数据列名」格式 pivot_df.columns = [f'{col[1]}_{col[0]}' for col in pivot_df.columns] # 重置索引把Timestamp转为普通列 pivot_df = pivot_df.reset_index()
场景2:运行pivot后出现同一Timestamp对应多行、其余位置为空
该现象说明你的原始数据存在Timestamp+col_1重复的条目,改用pivot_table指定聚合规则即可,示例代码如下:
pivot_table_df = pd.pivot_table( df, index='Timestamp', columns='col_1', values=['data_1', 'data_2'], # 聚合规则可根据需求调整:first取第一条记录、sum求和、mean取均值等 aggfunc='first' ) # 同场景1调整列名、重置索引 pivot_table_df.columns = [f'{col[1]}_{col[0]}' for col in pivot_table_df.columns] pivot_table_df = pivot_table_df.reset_index()
以上两种方法输出的结果都完全匹配你需要的表格结构。
内容的提问来源于stack exchange,提问作者Args
相关产品推荐
相关产品推荐

