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 可能的操作,但我是不知道!
谢谢!
看来你可以做一个 stack
和 value_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
我有一个我认为非常微不足道的问题,但我正在寻找一种比我认为可能的更好的编码方式。
我有以下数据框:
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 可能的操作,但我是不知道!
谢谢!
看来你可以做一个 stack
和 value_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