按某些列分组数据框,什么都不做,显示结果

0 投票
1 回答
36 浏览
提问于 2025-04-12 22:10

我有一个Pandas的数据表,想要根据一些列来对数据进行分组,然后不做任何操作,最后显示出处理后的数据表。听起来可能有点奇怪,但其实这是为了方便展示,因为我需要把这个数据表格式化成Latex的表格格式。

来看这个例子:

import pandas as pd

data = [
    dict(a=1, b=2, c=3),
    dict(a=1, b=2, c=4),
    dict(a=1, b=2, c=3),
    dict(a=2, b=1, c=5),
    dict(a=2, b=1, c=9)
]

df = pd.DataFrame.from_records(data)
display(df)

print("reindexed")
df2 = df.set_index(["a", "b"]).sort_index()
display(df2)

输出结果是:

   a  b  c
0  1  2  3
1  1  2  4
2  1  2  3
3  2  1  5
4  2  1  9

reindexed
     c
a b   
1 2  3
  2  4
  2  3
2 1  5
  1  9

我不想在b这一列中出现重复的值。期望的输出应该是:

     c
a b   
1 2  3
     4
     3
2 1  5
     9

我一直没能做到这一点,虽然这应该很简单。我尝试使用了分组操作:

print("grouped")
df3 = df.groupby(["a", "b"]).apply(lambda x: x)
print(df3)

但得到的结果是:

grouped
       a  b  c
a b           
1 2 0  1  2  3
    1  1  2  4
    2  1  2  3
2 1 3  2  1  5
    4  2  1  9

我哪里做错了呢?

1 个回答

1

你不应该强行让 pandas 对象显示出来。

在一个多重索引(MultiIndex)中,最后一层总是会显示出来。

如果你只是想快速显示一下,你可以用一个小技巧,添加一个看不见的层级:

df2 = df.assign(**{'': ''}).set_index(["a", "b", '']).sort_index()

输出结果:

在这里输入图片描述

撰写回答