Pandas能从一个字符串中识别出最大的贡献者,并将其替换为贡献者的名字吗?

pwuypxnk  于 2023-02-27  发布在  其他
关注(0)|答案(1)|浏览(122)

我有一些地下水数据,我正在尝试分析。对于每口井,都有一个关于过滤器周围岩性的描述。我的目标是根据主要的岩性类型将所有的井分为几个主要类别,这样我就可以为所有的岩性制作单独的直方图(基于水中氟化物的浓度)。
我遇到的问题是,我想从示例中转换岩性列:BK:86%,LK:14%--〉bk。因此,我想编写一个代码,能够从这样的示例中识别出最大的贡献者-问题是我有9000口井要做这件事,而且有许多不同的岩性具有不同的贡献。
我遇到的另一个问题是,对于一些油井,有两种岩性类型,贡献相等-我的想法是为每种类型创建一个条目,具有相同的油井ID。
然而,我真的迷路了吗?如果有人能给我指出正确的方向,我将不胜感激。
我的代码如下所示:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

#read data from excel
df1 = pd.read_excel(r"data1.xlsx", 'sheet2')
df2 = pd.read_excel(r"data2.xlsx", 'sheet2')
#merges dataframes
df = pd.concat([df1, df2])

df['INDTAG_LITHOLOGI'].replace('', np.nan, inplace=True) #replace empty fields with 'not a number'
df.dropna(subset=['INDTAG_LITHOLOGI'], inplace=True) #removes all rows with NaN

我的想法是用最大值如果我能让python将每个条目识别为一个值列表(不知道它在 Dataframe 中时是否已经是一个列表,或者只是一个字符串).并且在某种程度上使用panda replace函数来达到我的最终目标,然而中间有一堆步骤,我不知道如何实现.每个条目都是xx 57%的格式,年32%,...
任何帮助都非常感谢,我在这台自动取款机上迷路了。
编辑:我的 Dataframe 如下所示:

df = pd.DataFrame([['1.  172', 'hs: 88%, hi: 13%'], ['1.  174', 'hs:100%'], ['5.  129', 'ds: 96%, l :  4%']], columns=['WELL_ID', 'LITHOLOGY'])
rxztt3cl

rxztt3cl1#

您可以使用字符串是字典格式这一事实,如下所示:

def func(s):
    try:
        d = dict((a.strip(), int(b.replace('%','').strip())) for a, b in (part.split(':') for part in s.split(', ')))
        return max(d, key=d.get)
    except:
        return 'error'

df['maxLith'] = df['LITHOLOGY'].map(func)

print(df)

其给出:

WELL_ID         LITHOLOGY maxLith
0  1.  172  hs: 88%, hi: 13%      hs
1  1.  174           hs:100%      hs
2  5.  129  ds: 96%, l :  4%      ds

如果存在格式错误且无法转换的行,则可以使用以下命令显示这些行:

print(df[df['maxLith'] == 'error'])

相关问题