python-3.x - 如果关联 ID 的一部分匹配,则来自多行的平均值
问题描述
我有一个地下水模型输出文件,其中包含大约 200 口井的模拟水位。棘手的部分是,根据井跨越的模型层数(不同深度),井最多可以有 5 个值。需要对这些值进行平均,以便将它们与另一个数据框中的单个观察到的水位进行比较。每个孔都有一个 11 个字符的 ID(即 HARN0000219)。如果一口井有 4 层,则模型 ID 会在第一层之后为每个附加层进行调整(我无法控制模型输出文件的创建方式)。例如,一个有 4 层的井将有 4 个值,关联的 ID 将是:HARN0000219、HARN0000219.1、HARN0000219.2、HARN0000219.3。
如何通过基井 ID 计算平均水位?
示例数据框:
df = pd.DataFrame({
'wl': [4568.35, 4538.85, 4156.48, 4156.54, 4156.59, 4156.61],
'ID': ['GRAN0000800', 'HARN0000009', 'HARN0000219', 'HARN0000219.1', 'HARN0000219.2', 'HARN0000219.3']
})
我假设它会以这样的方式开始,但不知道从哪里开始。
for well, row in well_mod.iterrows():
if # first 11 characters = next:
# average all wl values
任何帮助将不胜感激!
解决方案
您需要创建一个新系列,其中包含该系列的相关前缀"ID"
和分组。例如,
# take first 11 characters of ID
key = df['ID'].str[:11]
# average water level for each base ID
df.groupby(key)['wl'].mean()
ID
GRAN0000800 4568.350
HARN0000009 4538.850
HARN0000219 4156.555
Name: wl, dtype: float64
根据您的 ID 的结构,以下可能更合适。
# take everything from ID before the period
key = df['ID'].str.split('.').str[0]
推荐阅读
- amazon-web-services - 使用 Goroutines 和 Channels 将多个文件并行上传到 Amazon S3
- extjs - ExtJS 在树形面板中插入新子项的问题
- php - 如何锁定文件以防止读取/写入同一文件的多个 ajax 请求?
- dart - 下载 Google Drive 直接链接时如何显示正确的进度?
- typescript - Typescript中接口的通用键值
- java - 在下拉列表中更改字符串
- c++ - 从 QValueAxis::rangeChanged 处理程序更改 QChart 数据是否错误?
- javascript - 数组内的 n 个数字的总和是 x 个数字并创建结果的子集
- keras - 在 CNN 的最后一层中使用哪些设置进行回归
- javascript - 使用开发工具检查时找不到图像