我有一张类似于这张桌子的桌子:

     id      val  
0   abc_1    5
1   abc_1    3
2   abc_1    7
3   abc_2    12
4   abc_2    6
5   abc_2    9
...

我想根据id将行"拆分"成列,因此结果应该是:

     id      val1   val2   val3  
0   abc_1    5       3       7
1   abc_2    12      6       9

我试图通过创建组,然后使用Pivot来实现:

df['group'] = (df.index // 3) + 1

>>>
     id      val    group  
0   abc_1    5       1
1   abc_1    3       1
2   abc_1    7       1
3   abc_2    12      2
4   abc_2    6       2
5   abc_2    9       2

然后,当我使用PIVOT时,我得到了许多空值的新列al.

My goal is to get this desired output , open to other solutions as well.

...

     id      val1   val2   val3  
0   abc_1    5       3       7
1   abc_2    12      6       9

推荐答案

一种可能的解决方案:

(df.assign(val_names = [f'val{i}' for i in df.groupby('id').cumcount()+1])
 .pivot(index='id', columns='val_names', values='val')
 .rename_axis(None, axis=1)
 .reset_index())

输出:

      id  val1  val2  val3
0  abc_1     5     3     7
1  abc_2    12     6     9

Python相关问答推荐

如何以实现以下所述的预期行为的方式添加两只Pandas pyramme

如何判断. text文件中的某个字符,然后读取该行

如何计算部分聚合数据的统计数据

过滤绕轴旋转的螺旋桨

如何在PIL、Python中对图像应用彩色面膜?

Python无法在已导入的目录中看到新模块

Python中使用时区感知日期时间对象进行时间算术的Incredit

GL pygame无法让缓冲区与vertextPointer和colorPointer一起可靠地工作

具有多个选项的计数_匹配

将DF中的名称与另一DF拆分并匹配并返回匹配的公司

如何将多进程池声明为变量并将其导入到另一个Python文件

如何从pandas的rame类继承并使用filepath实例化

导入...从...混乱

将JSON对象转换为Dataframe

Python导入某些库时非法指令(核心转储)(beautifulsoup4."" yfinance)

如何合并两个列表,并获得每个索引值最高的列表名称?

Flask Jinja2如果语句总是计算为false&

python sklearn ValueError:使用序列设置数组元素

通过追加列表以极向聚合

Pandas—堆栈多索引头,但不包括第一列