[英]Pandas: How to include a category in groupby that is not present in DataFrame
[英]How to include columns in groupby that is not present in Pandas DataFrame
此數據框分為 A 和 B。
我想根據標准值“0”、“> 0”和 nan 計算值。
請參閱類別 A。沒有“nan”數據。
df :
Category A A A B B
CODE U-01 U-02 U-03 U-04 U-05
n1 0 1 0 2 nan
n2 1 1 0 nan nan
n3 3 0 0 0 2
在守則中,
df1 = (df.unstack()
.mask(lambda x: x.gt(0), '>0')
.fillna('nan')
.groupby(level=[0, 2])
.value_counts()
.unstack([0,2], fill_value=0)
.rename(columns={0:'0'}))
輸出丟棄 Category A & nan 列。 我想表達到“0,> 0,nan”中的每一列。
Category A B
Standard 0 >0 0 >0 nan
n1 2 1 0 1 1
n2 1 2 0 0 2
n3 1 1 1 1 0
我想要的輸出表如下所示:
Category A B
Standard 0 >0 nan 0 >0 nan
n1 2 1 0 0 1 1
n2 1 2 0 0 0 2
n3 1 1 0 1 1 0
第一個想法是通過DataFrame.reindex
創建的所有可能組合使用MultiIndex.from_product
:
df1 = (df.unstack()
.mask(lambda x: x.gt(0), '>0')
.fillna('nan')
.groupby(level=[0, 2])
.value_counts()
.unstack([0,2], fill_value=0)
.rename(columns={0:'0'})
)
mux = pd.MultiIndex.from_product([df.columns.levels[0], ['0','>0','nan']])
df1 = df1.reindex(mux, axis=1, fill_value=0)
print (df1)
Category A B
0 >0 nan 0 >0 nan
n1 2 1 0 0 1 1
n2 1 2 0 0 0 2
n3 2 1 0 1 1 0
或者,您可以通過stack
和unstack
stack
來重塑unstack
,並將缺失值轉換為0
:
df1 = (df.unstack()
.mask(lambda x: x.gt(0), '>0')
.fillna('nan')
.groupby(level=[0, 2])
.value_counts()
.unstack([0,2], fill_value=0)
.rename(columns={0:'0'})
.stack()
.fillna(0)
.astype(int)
.unstack()
)
print (df1)
Category A B
0 >0 nan 0 >0 nan
n1 2 1 0 0 1 1
n2 1 2 0 0 0 2
n3 2 1 0 1 1 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.