如何将填充的0行添加到Pandas数据框中?

我有以下形式的 df

import pandas as pd
df = pd.DataFrame({'col1' : [1,1,1,2,2,3,3,4],
    'col2' : ['a', 'b', 'c', 'a', 'b', 'a', 'b', 'a'],
    'col3' : ['x', 'y', 'z', 'p','q','r','s','t']
        })

col1    col2    col3
0   1   a   x
1   1   b   y
2   1   c   z
3   2   a   p
4   2   b   q
5   3   a   r
6   3   b   s
7   4   a   t


df2 = df.groupby(['col1','col2'])['col3'].sum()

df2

col1  col2
1     a       x
      b       y
      c       z
2     a       p
      b       q
3     a       r
      b       s
4     a       t

现在我想向每个 col1 索引添加填充 0 行,其中 a , b, c, d 缺失,因此预期输出应该是

col1  col2
1     a       x
      b       y
      c       z
      d       0
2     a       p
      b       q
      c       0
      d       0
3     a       r
      b       s
      c       0
      d       0
4     a       t
      b       0
      c       0
      d       0

回答

使用unstack+ reindex+ stack

out = (
    df2.unstack(fill_value=0)
        .reindex(columns=['a', 'b', 'c', 'd'], fill_value=0)
        .stack()
)

out

col1  col2
1     a       x
      b       y
      c       z
      d       0
2     a       p
      b       q
      c       0
      d       0
3     a       r
      b       s
      c       0
      d       0
4     a       t
      b       0
      c       0
      d       0
dtype: object

完整的工作示例:

import pandas as pd

df = pd.DataFrame({
    'col1': [1, 1, 1, 2, 2, 3, 3, 4],
    'col2': ['a', 'b', 'c', 'a', 'b', 'a', 'b', 'a'],
    'col3': ['x', 'y', 'z', 'p', 'q', 'r', 's', 't']
})

df2 = df.groupby(['col1', 'col2'])['col3'].sum()
out = (
    df2.unstack(fill_value=0)
        .reindex(columns=['a', 'b', 'c', 'd'], fill_value=0)
        .stack()
)
print(out)


以上是如何将填充的0行添加到Pandas数据框中?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>