簡體   English   中英

如何使用索引計數列創建 Pandas pivot 表?

[英]How to create a Pandas pivot table with a column that is the count of an index?

我有一個包含 82 行和 8 列的 dataframe,看起來像這樣

    Location  photo_pos Min_vis_point  ... valid_photo  photo_angle Distance
0          1          3           1.5  ...           j           20       10
1          1          3           1.5  ...           j           20       10
2          1          3           1.5  ...           j           20       10
3          1          9           1.5  ...           j           20       10
4          1          9           1.5  ...           j           20       10
..       ...        ...           ...  ...         ...          ...      ...
77         4          8           0.8  ...           j            0        7
78         4          5           0.8  ...           j            0        7
79         4          6             2  ...           j            0       10
80         4          9           1.5  ...           j            0       10
81         4          8           1.5  ...           j            0        7

從這個 dataframe 中,我想創建一個 pivot 表,該表具有列位置、Photo_pos 和 Valid_photo 作為索引,並計算每個組中有多少“j”或“n”。

最初,我使用以下代碼通過 groupby() 實現了這一點

'Grouping pictures by location in the blade and j/n criteria'
df_group_by_loc_valid=df.groupby(["Location","photo_pos","valid_photo"])["valid_photo"]

#Print the count of how many valid and not valid pictures for each location and position
print(df_group_by_loc_valid.count())

它看起來像這樣,這正是我需要的:

Location  photo_pos  valid_photo
1         2          j              3
          3          j              3
          5          j              4
          6          j              5
          8          j              6
          9          j              5
2         3          j              4
                     n              2
          6          j              2
                     n              6
3         2          j              1
          3          j              3
          9          j              2
                     n              7
4         2          j              2
                     n              2
          5          j              1
          6          j              3
          8          j              2
          9          j              1
5         3          j              1
                     n              3
          6          j              4
          9          j              2
                     n              2
6         2          j              3
          3          j              1
          8          j              2
Name: valid_photo, dtype: int64

但是,我也想通過 pivot 表來實現這一點,但我做不到。 第一個最接近的結果是使用這條線:

pivot_table=pd.pivot_table(df,index=['Location','photo_pos'], columns='valid_photo').fillna(0)
print(pivot_table)

打印如下內容:

                    valid_photo
Location photo_pos             
1        2                    3
         3                    3
         5                    4
         6                    5
         8                    6
         9                    5
2        3                    6
         6                    8
3        2                    1
         3                    3
         9                    9
4        2                    4
         5                    1
         6                    3
         8                    2
         9                    1
5        3                    4
         6                    4
         9                    4
6        2                    3
         3                    1
         8                    2

問題是有效照片的數量不區分“j”或“n”

第二個最接近的結果是使用這條線:

pivot_table=pd.pivot_table(df,index=['Location','photo_pos','valid_photo'], aggfunc='count')
print(pivot_table)

哪個打印:

                                Distance  ...  photo_angle
Location photo_pos valid_photo            ...             
1        2         j                   3  ...            3
         3         j                   3  ...            3
         5         j                   4  ...            4
         6         j                   5  ...            5
         8         j                   6  ...            6
         9         j                   5  ...            5
2        3         j                   4  ...            4
                   n                   2  ...            2
         6         j                   2  ...            2
                   n                   6  ...            6
3        2         j                   1  ...            1
         3         j                   3  ...            3
         9         j                   2  ...            2
                   n                   7  ...            7
4        2         j                   2  ...            2
                   n                   2  ...            2
         5         j                   1  ...            1
         6         j                   3  ...            3
         8         j                   2  ...            2
         9         j                   1  ...            1
5        3         j                   1  ...            1
                   n                   3  ...            3
         6         j                   4  ...            4
         9         j                   2  ...            2
                   n                   2  ...            2
6        2         j                   3  ...            3
         3         j                   1  ...            1
         8         j                   2  ...            2

在這種情況下,問題在於將原始數據幀中列的 rest 作為列。

如果我嘗試添加名為valid_photo的列,則會收到錯誤Grouper for 'valid_photo' not 1-dimensional

作為參考,我試圖在 Excel 中實現如下所示:

Pivot表

Pivot 字段

所以我可以 plot 是這樣的:

Plot樣品

我怎樣才能做到這一點?

預先感謝您!

如果我們創建一個valid_photo 的虛擬變量並在pivot_table 中調用它以進行分組……如下所示;

df["valid_photo_dummy"] = df["valid_photo"]

df1 = df.pivot_table(index = ['Location','photo_pos','valid_photo'],
                     values = 'valid_photo_dummy',
                     aggfunc='count')

df1.rename(columns={'valid_photo_dummy':'Frequency'}, inplace=True)

不確定這是否滿足您的要求...希望這會有所幫助...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM