python - 在一列中给出相同的值,连接剩余的行?

标签 python pandas

给定 pandas DataFrame:

name   hobby   since
paul   A       1995 
john   A       2005 
paul   B       2015
mary   G       2013
chris  E       2005
chris  D       2001
paul   C       1986

我想得到:

name   hobby1   since1    hobby2   since2    hobby3   since3
paul   A        1995      B        2015      C        1986 
john   A        2005      NaN      NaN       NaN      NaN
mary   G        2013      NaN      NaN       NaN      NaN
chris  E        2005      D        2001      NaN      NaN

即我想每个名字一行。一个人可以拥有的最大爱好数量,在这种情况下,比如 3,是我事先知道的。执行此操作的最优雅/最快捷的方法是什么?

最佳答案

可以先melt然后,groupby.cumcount()添加到 variable,然后使用 pivot_table() 进行数据透视:

m=df.melt('name')
(m.assign(variable=m.variable+(m.groupby(['name','variable']).cumcount()+1).astype(str))
 .pivot_table(index='name',columns='variable',values='value',aggfunc='first')
.rename_axis(None,axis=1))

      hobby1 hobby2 hobby3 since1 since2 since3
name                                           
chris      E      D    NaN   2005   2001    NaN
john       A    NaN    NaN   2005    NaN    NaN
mary       G    NaN    NaN   2013    NaN    NaN
paul       A      B      C   1995   2015   1986

关于python - 在一列中给出相同的值,连接剩余的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56722155/

相关文章:

python - 将 .jpg 图像转换为 .png

python - Pandas 以与循环不同的方式修改列

python - 如何根据另一个数据框值突出显示数据框,以便突出显示的数据框可以导出到Excel

python - Pandas read_csv 在解析数字时忽略美元符号

python - 遍历 pandas 字符串索引将它们变成 float

python - 将包含字典列表的列转换为 Pandas 数据框中的多列

python - 使用 sklearn 计算关键字频率仅产生零计数

python - Python 处理的输出的最佳数据结构是什么?

Python解析大文本文件并抓取多层次数据

python - 定义一个函数使用其他函数名作为参数