【发布时间】:2021-05-06 00:37:20
【问题描述】:
我有一个 3D 数据集(Easting(X)、Northing(Y)、Elevation(Z))并且有某些有害元素的值,我们可以称之为 A、B、C。间隔是每 20 英尺,除非在Z 值的末尾可能会更小,因为它不能保证你会有偶数 20。
| 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 |
我想使用这个数据集并制作一个新的数据集,该数据集在 40 秒而不是 20 秒上进行平均。如果没有一对,则只需输入最后一个值。它按 ID 平均。例如看起来像这样。
| ID | midX | midY | midZ | From | To | Length | A | B | C |
|---|---|---|---|---|---|---|---|---|---|
| AAA1 | 37704.3 | 102975.1 | 5720.35 | 40.0 | 80.0 | 40.0 | 0.1675 | 4.95 | 0.0075 |
| AAA1 | 37684.6 | 102974.2 | 5701.35 | 80.0 | 120.0 | 40.0 | 0.2185 | 7.0 | 0.080 |
| AAA1 | 37684.6 | 102980.4 | 5683.8 | 120.0 | 140.0 | 20.0 | 0.648 | 5.4 | 0.222 |
| AAA2 | 36979.0 | 106198.0 | 5753.0 | 0.0 | 40.0 | 40.0 | 0.098 | 5.25 | 0.078 |
| AAA2 | 36979.0 | 106198.0 | 5723.0 | 40.0 | 58.7 | 18.7 | 0.742 | 0.4 | 0.043 |
import pandas as pd
phx = pd.read_csv('./data.csv')
phx = phx.sort_values(['ID','midZ'],ascending=False).groupby('ID').head(3)
这将按 ID 和降序 midZ 对其进行排序,这正是我所需要的。下一步是在 step = 2 中平均,但如果有奇数,则保留最后一个。我一直在谷歌搜索并尝试各种事情,但它不起作用。我试过这个:
step = 2
phxdf = phx.groupby(phx.index//step).mean()
但这并没有给我我需要的东西。
任何帮助将不胜感激。蒂亚!
【问题讨论】:
-
你所说的“40 岁平均”是什么意思。
-
我想要 40 英尺的间隔,所以将 2 个 20 的距离从洞中取出,然后平均跑 40 英尺。
标签: python pandas sorting grouping average