gpt4 book ai didi

Python pandas dataframe 将长变为宽、多列和常量值

转载 作者:行者123 更新时间:2023-12-01 02:25:23 26 4
gpt4 key购买 nike

我需要将 DataFrame 从长格式 reshape 为宽格式。数据示例:

import pandas as pd

df = pd.DataFrame({'id':[1,1,1,2,2,2,3,3], 'id_age':
30,30,30,23,23,23,29,29], 'product':['A','B','C','A','B','C','A','B'],
'rank':[1,2,3,3,1,2,2,1], 'result':['x','y','z','p','q','r','s','t']})

print(df)

id id_age product rank result
0 1 30 A 1 x
1 1 30 B 2 y
2 1 30 C 3 z
3 2 23 A 3 p
4 2 23 B 1 q
5 2 23 C 2 r
6 3 29 A 2 s
7 3 29 B 1 t

所需的输出是

id  id_age    product       rank     result
0 1 30 [A, B, C] [1, 2, 3] [x, y, z]
1 2 23 [A, B, C] [3, 1, 2] [p, q, r]
2 3 29 [A, B] [2, 1] [s, t]

即每个 id 一行。我尝试通过创建数据透视表来解决问题,但我不知道如何:

  1. 针对多个列(产品、排名、结果) reshape 它
  2. 处理个体内恒定的值(value)观 (id_age)
  3. 使最终数据框中的列采用列表格式(顺序很重要,排名中列表的第一个值对应于给定个体结果中列表的第一个值)。

任何有关如何推进此问题的建议都将受到赞赏!

最佳答案

对我来说:

df = df.groupby(['id','id_age']).agg(tuple).applymap(list)
print (df)
product rank result
id id_age
1 30 [A, B, C] [1, 2, 3] [x, y, z]
2 23 [A, B, C] [3, 1, 2] [p, q, r]
3 29 [A, B] [2, 1] [s, t]

关于Python pandas dataframe 将长变为宽、多列和常量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47475354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com