簡體   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