Groupby Sum 和 Flatten 多行索引 DataFrame

Groupby Sum and Flatten Multi-Row Index DataFrame

我有一个我认为非常微不足道的问题,但我正在寻找一种比我认为可能的更好的编码方式。

我有以下数据框:

Index 1 Index 2 Index 3 Value
A a1 a11 1
A a1 a12 1
A a2 a21 1
B b1 b11 1
C c1 c11 1
C c2 c21 1

我想显示所有 groupby 结果并将数据框展平为如下所示:

Index Value
A 3
a1 2
a11 1
a12 1
B 1
b1 1
b11 1
C 2
c1 1
c11 1
c2 1
c21 1

我可以在单个索引 X 列上使用多个 groupby 来实现它,然后按顺序整理结果,但我正在寻找更多 pythonic/efficient pandas 可能的操作,但我是不知道!

谢谢!

看来你可以做一个 stackvalue_counts:

index_cols = df.filter(like='Index ').columns
flattened_series = df[index_cols].stack().value_counts(sort=False)

输出:

>>> flattened_series
A      3
a1     2
C      2
a11    1
a12    1
a2     1
a21    1
B      1
b1     1
b11    1
c1     1
c11    1
c2     1
c21    1
dtype: int64

那只是统计了索引列的值;它实际上并不对 Value 列的值求和。 那个也很简单:

flattened_summed_series = df.set_index('Value').stack().reset_index(level=0).groupby(0, sort=False)['Value'].sum().rename_axis(None)

输出:

>>> flattened_summed_series
A      3
a1     2
a11    1
a12    1
a2     1
a21    1
B      1
b1     1
b11    1
C      2
c1     1
c11    1
c2     1
c21    1
Name: Value, dtype: int64