gpt4 book ai didi

python - 按 Pandas 数据框分组并选择序列中的最大值

转载 作者:行者123 更新时间:2023-12-03 14:42:08 25 4
gpt4 key购买 nike

我有一个 Pandas 数据框,表示几个目标涡轮机每 10 度的点之间的高程差。我选择了遵循标准的高程差异,并添加了一列表示它们是否连续(metDegDiff = 10 表示连续点)。
如何通过 targTurb 在 3 个或更多连续 10 度点中选择 elevDif 的最大值?

ridgeDF2 = pd.DataFrame(data = {
'MetID':['A06_40','A06_50','A06_60','A06_70','A06_80','A06_100','A06_110','A06_140','A07_110','A07_130','A07_140','A08_100','A08_110','A08_120','A08_130','A08_220'],
'targTurb':['A06','A06','A06','A06','A06','A06','A06','A06','A07','A07','A07','A08','A08','A08','A08','A08'],
'metDeg':[30,50,60,70,80,100,110,140,110,130,140,100,110,120,130,220],
'elevDif':[1.433234, 1.602997,3.227997,2.002991,2.414001,2.96402,1.513,1.793976,1.612,2.429993,1.639008,1.500977,3.048004,2.174011,1.813995,1.527008],
'metDegDiff':[20,10,10,10,10,20,10,30,-30,20,10,-40,10,10,10,30]})
[Dbg]>>> ridgeDF2
MetID targTurb metDeg elevDif metDegDiff
0 A06_40 A06 30 1.433234 20
1 A06_50 A06 50 1.602997 10
2 A06_60 A06 60 3.227997 10
3 A06_70 A06 70 2.002991 10
4 A06_80 A06 80 2.414001 10
5 A06_100 A06 100 2.964020 20
6 A06_110 A06 110 1.513000 10
7 A06_140 A06 140 1.793976 30
8 A07_110 A07 110 1.612000 -30
9 A07_130 A07 130 2.429993 20
10 A07_140 A07 140 1.639008 10
11 A08_100 A08 100 1.500977 -40
12 A08_110 A08 110 3.048004 10
13 A08_120 A08 120 2.174011 10
14 A08_130 A08 130 1.813995 10
15 A08_220 A08 220 1.527008 30
在示例中,对于 A06,有 4 行具有连续的 10 个metDeg 值(第 1、2、3 和 4 行),对于 A8,有 3 行(第 12、13 和 14 行)。请注意,这 2 个系列的长度为 3 或更多。
因此,输出将是这两个选定系列中的最大 elevDif。像这样:
MetID  targTurb  metDeg   elevDif  metDegDiff
A06_60 A06 60 3.227997 10
A08_110 A08 110 3.048004 10

最佳答案

下面的代码应该可以工作。您可以单独运行每一行以查看发生了什么。

ridgeDF2['t/f'] = ridgeDF2['metDegDiff'] != 10
ridgeDF2['t/f'] = ridgeDF2['t/f'].shift().fillna(0).cumsum()
ridgeDF2['count'] = ridgeDF2.groupby('t/f')['t/f'].transform(len)-1
ridgeDF2['count'] = np.where(ridgeDF2['count'] >= 3,True,False)
ridgeDF2.loc[ridgeDF2['metDegDiff'] != 10,'count'] = False
highest = ridgeDF2.loc[ridgeDF2['count'] == True]
highest = highest.loc[highest.groupby(['targTurb','metDegDiff','t/f'])['elevDif'].idxmax()]
highest.drop(columns = ['t/f','count'])

关于python - 按 Pandas 数据框分组并选择序列中的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62764298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com