繁体   English   中英

在数据透视表熊猫中用 0 填充列

[英]Fill columns with 0 in pivot table pandas

在其中一列中,如果缺少如何用 0 填充而不是将其留空?

雷:

df = pd.DataFrame({"day":[3, 3, 3, 3, 3, 3, 3],
                   "hour":[15, 15, 15, 15, 19, 20, 21],
                   "location":["A", "A", "B", "C", "D", "A", "B"],
                   "numbers": [323, 2354, 124, 56, 45, 11, 44]})

df.pivot_table(index="location",
           columns=["day", "hour"],
           values = "numbers",
           fill_value=0,
           aggfunc="count").unstack().to_frame()

哪些输出:

                            0
day   hour    location  
                 A          2
                 B          1
       15        C          0
                 D          0

                 A          0 
                 B          0
       19        C          0
                 D          1

                 A          1
                 B          0
 3      20       C          0
                 D          0

等等.. 为了更好的可读性,我只是在两者之间留了空间。

如您所见,小时从 15 到 19。我想包括 hours= 16、17、18,其中所有位置和 0 列中的所有行都为 0。

所以期望的输出是:

                            0
day   hour    location  
                 A          2
                 B          1
       15        C          0
                 D          0

                 A          0
                 B          0
       16        C          0
                 D          0

                 A          0
                 B          0
       17        C          0
                 D          0

                 A          0
                 B          0
       18        C          0
                 D          0

                 A          0 
                 B          0
       19        C          0
                 D          1

                 A          1
                 B          0
 3      20       C          0
                 D          0

我怎样才能做到这一点? 提前致谢。

让我们添加reindex与方法pd.MultIndex创建使用from_product独特阵列和时间范围。

df.pivot_table(index="location",
           columns=["day", "hour"],
           values = "numbers",
           fill_value=0,
           aggfunc="count").unstack().to_frame()\
  .reindex(pd.MultiIndex.from_product([df['day'].unique(),
                                       np.arange(df['hour'].min(),
                                                 df['hour'].max()),
                                       df['location'].unique()]), 
           fill_value=0)

输出:

        0
3 15 A  2
     B  1
     C  1
     D  0
  16 A  0
     B  0
     C  0
     D  0
  17 A  0
     B  0
     C  0
     D  0
  18 A  0
     B  0
     C  0
     D  0
  19 A  0
     B  0
     C  0
     D  1
  20 A  1
     B  0
     C  0
     D  0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM