[英]Python: How to pad with zeros?
假設我們有一個如下數據框:
df = pd.DataFrame({ 'Col1' : ['a', 'a', 'a', 'a', 'b', 'b', 'c', 'c'],
'col2' : ['0.5', '0.78', '0.78', '0.4', '2', '9', '2', '7',]
})
我計算了col1
所有唯一值的行數。 像a
具有4行, b
和c
各有,2行做:
df.groupby(['Col1']).size()
我把輸出作為
Col1
a 4
b 2
c 2
dtype: int64
完成此操作后,我想檢查a,b,c中哪一行具有最大行數(在這種情況下, a
具有最大行數)並填充其他行( b
和c
)與最大值之間的差異值和它們擁有的行,用零( b
和c
各有2行,因為4是最大行數,我想用b
和c
填充2個零)。 必須在末尾添加零。
我想用零填充它,因為我想在所有變量(a,b,c)上應用一個固定大小的窗口來繪制圖形。
您可以通過創建計數器GroupBy.cumcount
,建立MultiIndex
和DataFrame.reindex
由創建的所有組合MultiIndex.from_product
:
df1 = df.set_index(['Col1', df.groupby('Col1').cumcount()])
mux = pd.MultiIndex.from_product(df1.index.levels, names=df1.index.names)
df2 = df1.reindex(mux, fill_value=0).reset_index(level=1, drop=True).reset_index()
print (df2)
Col1 col2
0 a 0.5
1 a 0.78
2 a 0.78
3 a 0.4
4 b 2
5 b 9
6 b 0
7 b 0
8 c 2
9 c 7
10 c 0
11 c 0
使用相同的邏輯狀Jez的cumcount
,但與stack
和unstack
鏈
df.assign(key2=df.groupby('Col1').cumcount()).set_index(['Col1','key2']).unstack(fill_value=0).stack().reset_index('Col1')
Out[1047]:
Col1 col2
key2
0 a 0.5
1 a 0.78
2 a 0.78
3 a 0.4
0 b 2
1 b 9
2 b 0
3 b 0
0 c 2
1 c 7
2 c 0
3 c 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.