[英]Split pandas dataframe based on groupby
我想根據 ZZ 列拆分以下 dataframe
df =
N0_YLDF ZZ MAT
0 6.286333 2 11.669069
1 6.317000 6 11.669069
2 6.324889 6 11.516454
3 6.320667 5 11.516454
4 6.325556 5 11.516454
5 6.359000 6 11.516454
6 6.359000 6 11.516454
7 6.361111 7 11.516454
8 6.360778 7 11.516454
9 6.361111 6 11.516454
作為 output,我想要一個新的DataFrame
,其中N0_YLDF
列分成 4 列,每個ZZ
的唯一值對應一個新列。 我該如何 go 關於這個? 我可以做groupby,但不知道如何處理分組的object。
gb = df.groupby('ZZ')
[gb.get_group(x) for x in gb.groups]
還有另一種選擇,因為 groupby 返回一個生成器,我們可以簡單地使用列表理解來檢索第二個值(框架)。
dfs = [x for _, x in df.groupby('ZZ')]
在 R 中有一個名為 split 的數據幀方法。 這適用於所有 R 用戶:
def split(df, group):
gb = df.groupby(group)
return [gb.get_group(x) for x in gb.groups]
將它們存儲在dict
,這允許您根據組鍵訪問組數據幀。
d = dict(tuple(df.groupby('ZZ')))
d[6]
# N0_YLDF ZZ MAT
#1 6.317000 6 11.669069
#2 6.324889 6 11.516454
#5 6.359000 6 11.516454
#6 6.359000 6 11.516454
#9 6.361111 6 11.516454
如果您只需要 DataFrame 的一個子集,在這種情況下只需要'NO_YLDF'
系列,您可以修改 dict 理解。
d = dict((idx, gp['N0_YLDF']) for idx, gp in df.groupby('ZZ'))
d[6]
#1 6.317000
#2 6.324889
#5 6.359000
#6 6.359000
#9 6.361111
#Name: N0_YLDF, dtype: float64
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.