[英]pandas pivot table: How to find count for each group in Index and Column
[英]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 中實現如下所示:
所以我可以 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.