簡體   English   中英

Groupby 基於先前值的條件(Pandas Python)

[英]Groupby based on condition of pevious value (Pandas Python)

例如,我有這個樣本 dataframe

    Depth  Fluid

0   235.5  nan
1   236    water
2   236.5  water
3   237    nan
4   237.5  water
5   238    water

現在我想獲取樣本數據就像這樣

    Min_Depth  Max_Depth  Fluid

0   236        236.5      water
1   237.5      238        water

我已經閱讀了pandas groupbyshift方法,邏輯是如果先前的值仍然相同(水)然后將其分組,並使用minmax來獲取Depth ,但我不確定我是否可以構建代碼喜歡我想要的。 我是 Python 的新手,如果有人可以幫助我編寫代碼,我將不勝感激。 謝謝!

你可以用cumsum檢查

x = df.Fluid.ne('water')
out = df[~x].groupby([x.cumsum(),df.Fluid]).agg(max_dp= ('Depth','max'),
                                                min_dp= ('Depth','min')).reset_index(level=1)
out
Out[202]: 
       Fluid  max_dp  min_dp
Fluid                       
1      water   236.5   236.0
2      water   238.0   237.5

另一種可能的解決方案,基於pandas.unstack

(df.dropna()
 .assign(Fluid = lambda x: sorted(list(range(len(x)//2)) * 2))
 .set_index(['Fluid', ['minD', 'maxD'] * 2])
 .unstack()
 .droplevel(0, axis=1)
 .reset_index()
 .assign(Fluid = 'water'))

Output:

   Fluid   maxD   minD
0  water  236.5  236.0
1  water  238.0  237.5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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