计算 Pandas groupby 中的唯一索引值

Tim*_*per 6 python pandas

在 Pandas 中,有一种非常干净的方法可以按操作计算组内列中的不同值。例如

ex = pd.DataFrame([[1, 2, 3], [6, 7, 8], [1, 7, 9]], 
                  columns=["A", "B", "C"]).set_index(["A", "B"])
ex.groupby(level="A").C.nunique()
Run Code Online (Sandbox Code Playgroud)

将返回

A
1    2
6    1
Name: C, dtype: int64
Run Code Online (Sandbox Code Playgroud)

我还想B在分组时计算索引级别中的不同值A。我无法找到一个干净的方式来访问的级别Bgroupby对象。我能想到的最好的是:

ex.reset_index("B", drop=False).groupby(level="A").B.nunique()
Run Code Online (Sandbox Code Playgroud)

正确返回:

A
1    2
6    1
Name: B, dtype: int64 
Run Code Online (Sandbox Code Playgroud)

有没有办法让我在不重置索引或使用apply函数的情况下在 groupby 上执行此操作?

Ant*_*pov 6

IIUC 你可以reset_index对所有级别进行操作,然后将 groupby 设为“A”并应用nunique方法:

res = ex.reset_index().groupby('A').agg(lambda x: x.nunique())

In [339]: res
Out[339]:
   B  C
A
1  2  2
6  1  1
Run Code Online (Sandbox Code Playgroud)

与以下相同的解决方案pivot_table

In [341]: ex.reset_index().pivot_table(index='A', aggfunc=lambda x: x.nunique())
Out[341]:
   B  C
A
1  2  2
6  1  1
Run Code Online (Sandbox Code Playgroud)