我有一个包含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
尝试保持“学生Id”和“姓名”列不变,但将“标记”转换为多个列。这样,每个唯一的“学生Id”和“姓名”将有一行所有可能的标记。此外,我们不需要手动创建列,但它应该根据值动态创建
>> 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)]
下面是一个非常容易理解的答案,无需创建额外的列
输出:
另一种方式:
temp
将是一个数据帧,每个(id, name)
具有Marks
的聚合列表。然后,我们在将列重命名为所需格式并重置索引以放置id&;的同时,从中形成一个数据帧;将名称添加到后面的列得到
使用^{} 作为
df3
中创建的MultiIndex
计数器列的新列:如果需要integers缺少值:
相关问题 更多 >
编程相关推荐