python - 在 pandas groupby 聚合中包含缺失的值组合

标签 python pandas

问题

在 pandas groupby 聚合的输出中包含所有可能的值或值的组合。

示例

示例 pandas DataFrame 有三列,User , Code , 和 Subtotal :

import pandas as pd
example_df = pd.DataFrame([['a', 1, 1], ['a', 2, 1], ['b', 1, 1], ['b', 2, 1], ['c', 1, 1], ['c', 1, 1]], columns=['User', 'Code', 'Subtotal'])

我想在 User 上分组和 Code并得到 User 的每个组合的小计和 Code .

print(example_df.groupby(['User', 'Code']).Subtotal.sum().reset_index())

我得到的输出是:

  User   Code   Subtotal
0    a      1          1
1    a      2          1
2    b      1          1
3    b      2          1
4    c      1          2

如何包含缺少的组合 User=='c'Code==2在表中,即使它不存在于 example_df 中?

首选输出

下面是首选输出,零线表示 User=='c'Code==2组合。

  User   Code   Subtotal
0    a      1          1
1    a      2          1
2    b      1          1
3    b      2          1
4    c      1          2
5    c      2          0

最佳答案

您可以使用 unstackstack :

print(example_df.groupby(['User', 'Code']).Subtotal.sum()
                .unstack(fill_value=0)
                .stack()
                .reset_index(name='Subtotal'))
  User  Code  Subtotal
0    a     1         1
1    a     2         1
2    b     1         1
3    b     2         1
4    c     1         2
5    c     2         0

另一种解决方案 reindexMultiIndex 创建from_product :

df = example_df.groupby(['User', 'Code']).Subtotal.sum()
mux = pd.MultiIndex.from_product(df.index.levels, names=['User','Code'])
print (mux)
MultiIndex(levels=[['a', 'b', 'c'], [1, 2]],
           labels=[[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]],
           names=['User', 'Code'])

print (df.reindex(mux, fill_value=0).reset_index(name='Subtotal'))
  User  Code  Subtotal
0    a     1         1
1    a     2         1
2    b     1         1
3    b     2         1
4    c     1         2
5    c     2         0

关于python - 在 pandas groupby 聚合中包含缺失的值组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42854801/

相关文章:

python - 使用Python比较两个文件夹以及里面的所有文件

python - 迭代数据帧以打印索引、列和值

python - 散点图和线性回归的日期问题

python - 在 pandas 数据框中为变量填充零,无需按值分组

python - 如何修复在嵌套 for 循环中使用追加时索引丢失的问题

python - 带有 Pandas 数据框千位分隔符的 XlsxWriter

python - Pandas 切片和索引与 fillna 一起使用

python - 确保用户在使用 BMI 分析器时只输入整数

python - 通过 Python 脚本下载 YouTube 视频

python - Qt : setData method in a QAbstractItemModel