![](/img/trans.png)
[英]Python Pandas Dataframe - Groupby and Average based on Condition
[英]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 groupby
和shift
方法,邏輯是如果先前的值仍然相同(水)然后將其分組,並使用min
和max
來獲取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.