我有一个数据框,如下所示,我正在尝试按 Col1 进行“分组”(请参阅所需的输出)。这应该是显而易见的,但我一定不是在寻找正确的关键词。我尝试使用 groupby 进行的所有操作要么返回一个系列,要么似乎需要某种聚合。
df = pd.DataFrame({'Col1': ['A','B','A','B','B','B','A','A','B',],
'Col2': ['q','e','r','y','c','a','j','g','v',],
'Col3': [1,13,5,22,13,2,5,9,12],
})
Col1 Col2 Col3
0 A q 1
1 B e 13
2 A r 5
3 B y 22
4 B c 13
5 B a 2
6 A j 5
7 A g 9
8 B v 12
所需输出:
Col1 Col2 Col3
A q 1
r 5
j 5
g 9
B e 13
y 22
c 13
a 2
v 12
根据我的理解,这应该可以实现您的目标:多重索引
df = pd.DataFrame({'Col1': ['A','B','A','B','B','B','A','A','B',],
'Col2': ['q','e','r','y','c','a','j','g','v',],
'Col3': [1,13,5,22,13,2,5,9,12],
})
print(df.set_index(["Col1", "Col2"]).sort_index())
这将是输出:我不确定,对你来说唯一的问题是索引列的高度与值列的高度。
Col3
Col1 Col2
A g 9
j 5
q 1
r 5
B a 2
c 13
e 13
v 12
y 22
我的临时解决方案只是聚合,然后删除该聚合列。
df.groupby(['Col1', 'Col2', 'Col3'], as_index=False).count().drop([<your_aggregated_column_name>])
但是在您的情况下,数据按所有列进行分组,因此聚合函数无需计算任何内容(即没有创建聚合列。这就是您想要的结果
df.groupby(['Col1', 'Col2', 'Col3'], as_index=False).count()