gpt4 book ai didi

python - 使用python将一列转换为多行

转载 作者:行者123 更新时间:2023-12-03 19:39:37 25 4
gpt4 key购买 nike

我有 具有 3 列的数据集“df”。

>> Original Data

Student Id Name Marks
0 id_1 John 112
1 id_2 Rafs 181
2 id_2 Rafs 182
3 id_2 Rafs 183
4 id_3 Juan 222
5 id_3 Juan 312
6 id_3 Roller 21

正在尝试 保持“Student_Id”和“Name”列不变,但将“Marks”转换为多列。这样每个唯一的“Student_Id”和“Name”都将有一行所有可能的标记。此外,我们不需要手动创建列,但应根据值动态创建列。
>> Expected Output

Student Id Name Marks1 Marks2 Marks3
0 id_1 John 112 <NA> <NA>
1 id_2 Rafs 181 182 183
2 id_3 Juan 222 312 <NA>
3 id_3 Roller 21 <NA> <NA>
复制输入的样本数据
import pandas as pd

data = [
["id_1", 'John', 112],
["id_2", 'Rafs', 181],
["id_2", 'Rafs', 182],
["id_2", 'Rafs', 183],
["id_3", 'Juan', 222],
["id_3", 'Juan', 312],
["id_3", 'Roller', 21]
]
df = pd.DataFrame(data, columns = ['Student Id', 'Name', 'Marks'])
我试过 下面,但我没有得到所需的输出。它在括号()中给出结果,也缺少标记。
df3 = df.pivot_table(index=['Student Id','Name'], columns='Marks', aggfunc = 'max')

>>Output
Empty DataFrame
Columns: []
Index: [(id_1, John), (id_2, Rafs), (id_3, Juan), (id_3, Roller)]

最佳答案

使用 GroupBy.cumcount 用于创建计数器列的新列 MultiIndexdf3 :

df['g'] = df.groupby(['Student Id','Name']).cumcount().add(1)

df3 = (df.pivot_table(index=['Student Id','Name'],
columns='g',
values='Marks',
aggfunc = 'max')
.add_prefix('Marks')
.rename_axis(None, axis=1)
.reset_index())
print (df3)
Student Id Name Marks1 Marks2 Marks3
0 id_1 John 112.0 NaN NaN
1 id_2 Rafs 181.0 182.0 183.0
2 id_3 Juan 222.0 312.0 NaN
3 id_3 Roller 21.0 NaN NaN
如果需要 integers缺失值:
df['g'] = df.groupby(['Student Id','Name']).cumcount().add(1)

df3 = (df.pivot_table(index=['Student Id','Name'],
columns='g',
values='Marks',
aggfunc = 'max')
.add_prefix('Marks')
.astype('Int64')
.rename_axis(None, axis=1)
.reset_index())
print (df3)
Student Id Name Marks1 Marks2 Marks3
0 id_1 John 112 <NA> <NA>
1 id_2 Rafs 181 182 183
2 id_3 Juan 222 312 <NA>
3 id_3 Roller 21 <NA> <NA>

关于python - 使用python将一列转换为多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67687310/

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