簡體   English   中英

基於groupby拆分pandas dataframe

[英]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.

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