如何在groupby后转置DataFrame,实现按port分组结构转换?
实现方法
可以用Pandas的分组和表格重塑功能快速实现需求,具体步骤如下:
1. 构造原始数据
先还原你提供的初始DataFrame:
import pandas as pd data = { 'port': [1,2,3,4,1,2,3,4], 'valueA': [3.1,3.09,3.09,3.11,3.1,3.1,3.08,3.09], 'valueB': [58.2,58.3,58.15,58.2,58.25,58.25,58.15,58.1], 'valueC': [0.09,0.1,0.09,0.1,0.09,0.09,0.09,0.09] } df = pd.DataFrame(data)
2. 生成组内序号
按port分组后,给每个组内的行分配唯一序号,用来作为重塑后的行索引:
df['row_idx'] = df.groupby('port').cumcount()
3. 重塑表格结构
用pivot方法完成行列转换:将组内序号作为行、port值作为列、valueA作为单元格值:
result_df = df.pivot(index='row_idx', columns='port', values='valueA').reset_index(drop=True) # 把列名转为字符串格式(可选,消除默认的列名前缀) result_df.columns = result_df.columns.astype(str)
执行后得到的result_df就是你需要的结构:
| 1 | 2 | 3 | 4 |
|---|---|---|---|
| 3.1 | 3.09 | 3.09 | 3.11 |
| 3.1 | 3.1 | 3.08 | 3.09 |
简化写法
也可以用groupby结合unstack一步完成:
result_df = df.groupby('port')['valueA'].apply(pd.Series)
内容的提问来源于stack exchange,提问作者RedSmolf
相关产品推荐
相关产品推荐

