给定创建新文件的间隔,按ID进行平均分组

2024-05-29 11:03:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个3D数据集(东距(X)、北距(Y)、高程(Z)),并且有一些我们可以称之为a、B、C的有害元素的值。间隔是每20英尺一次,除非在Z值的末尾,否则它可能更小,因为它不能保证你会有偶数的20秒

^{tb1}$

我想获取这个数据集,并创建一个新的数据集,它的平均值是40秒,而不是20秒。如果没有一对,则只输入最后一个值。它按ID求平均值。例如,如下所示

^{tb2}$
import pandas as  pd
phx =  pd.read_csv('./data.csv')
phx = phx.sort_values(['ID','midZ'],ascending=False).groupby('ID').head(3)

这将按ID和降序midZ对其进行排序,这正是我所需要的。下一步是在步骤=2中求平均值,但如果有奇数,则只保留最后一个。我一直在谷歌上搜索和尝试各种各样的东西,但它不起作用。我试过这个:

step = 2
phxdf = phx.groupby(phx.index//step).mean()

但这并没有给我所需要的

任何帮助都将不胜感激。蒂亚


Tags: csv数据id元素间隔step平均值pd
1条回答
网友
1楼 · 发布于 2024-05-29 11:03:57

考虑在{{CD2>}的^ {CD1>}上,以{{CD3}}为上倍数计算条件为40的伪分组列。然后,在{}旁边运行{}聚合{}:

数据

from io import StringIO
import numpy as np
import pandas as pd

txt = '''ID|midX|midY|midZ|From|To|Length|A|B|C
AAA1| 37710.9 | 102978.3 | 5727.2 | 40.0  | 60.0  | 20.0   | 0.284 | 7.5 | 0.010 
AAA1| 37697.7 | 102971.9 | 5713.5 | 60.0  | 80.0  | 20.0   | 0.051 | 2.4 | 0.005 
AAA1| 37684.6 | 102978.3 | 5708.2 | 80.0  | 100.0 | 20.0   | 0.284 | 7.5 | 0.010 
AAA1| 37684.6 | 102970.0 | 5694.5 | 100.0 | 120.0 | 20.0   | 0.153 | 6.5 | 0.150 
AAA1| 37684.6 | 102980.4 | 5683.8 | 120.0 | 140.0 | 20.0   | 0.648 | 5.4 | 0.222 
AAA2| 36979.0 | 106198.0 | 5763.0 |  0.0  | 20.0  | 20.0   | 0.051 | 2.1 | 0.045 
AAA2| 36979.0 | 106198.0 | 5743.0 | 20.0  | 40.0  | 20.0   | 0.145 | 8.4 | 0.111 
AAA2| 36979.0 | 106198.0 | 5723.0 | 40.0  | 58.7  | 18.7   | 0.742 | 0.4 | 0.043'''

df = pd.read_csv(StringIO(txt), sep="|")

聚合

df['grp_40'] = np.ceil(df.groupby(['ID'])['Length'].cumsum().div(40))
df['Length'] = df.groupby(['ID', 'grp_40'])['Length'].transform('sum')

agg = (df.groupby(['ID', 'grp_40'], sort=False, as_index=False)
         .mean()
         .drop('grp_40', axis='columns')
      )

print(agg)
#      ID     midX       midY     midZ   From     To  Length       A     B       C
# 0  AAA1  37704.3  102975.10  5720.35   50.0   70.0    40.0  0.1675  4.95  0.0075
# 1  AAA1  37684.6  102974.15  5701.35   90.0  110.0    40.0  0.2185  7.00  0.0800
# 2  AAA1  37684.6  102980.40  5683.80  120.0  140.0    20.0  0.6480  5.40  0.2220
# 3  AAA2  36979.0  106198.00  5753.00   10.0   30.0    40.0  0.0980  5.25  0.0780
# 4  AAA2  36979.0  106198.00  5723.00   40.0   58.7    18.7  0.7420  0.40  0.0430

相关问题 更多 >

    热门问题