gpt4 book ai didi

python - 如何识别 Pandas DataFrame 中列的行中的字符串重复?

转载 作者:行者123 更新时间:2023-12-01 08:38:18 25 4
gpt4 key购买 nike

我正在想办法最好地处理这个问题。如果我有一个像这样的数据框:

Module---|-Line Item---|---Formula-----------------------------------------|-repetition?|--What repeated--------------------------------|---Where repeated
Module 1-|Line Item 1--|---hello[SUM: hello2]------------------------------|----yes-----|--hello[SUM: hello2]---------------------------|---Module 1 Line item 2
Module 1-|Line Item 2--|---goodbye[LOOKUP: blue123] + hello[SUM: hello2]---|----yes-----|--hello[SUM: hello2], goodbye[LOOKUP: blue123]-|---Module 1 Line item 1, Module 2 Line Item 1
Module 2-|Line Item 1--|---goodbye[LOOKUP: blue123] + some other line item-|----yes-----|--goodbye[LOOKUP: blue123]---------------------|---Module 1 Line item 2

我将如何设置搜索和查找来定位和识别中间、边缘或完整字符串的重复?

抱歉,格式看起来不太好基本上我已经填写了模块、行项目和公式列,但我需要找出某种可以应用于最后 3 列中每一列的搜索函数。我不知道从哪里开始。

我想要匹配 3 个或更多单词之间出现的任何重复,包括例如公式为 1 + 2 + 3 + 4 并且在公式列中出现 4 次,I' d 希望对“重复位置”列上的 bool 列“重复”返回 1 + 2 + 3 + 4 以及出现在该列上的每个模块/行项目组合的列表给出肯定的答复最后一栏。我确信一旦开始,我可以对其进行更多调整以满足我的需求。

最佳答案

这个有点困惑,肯定是执行某些步骤的更直接的方法,但它对您的数据有效。

第1步:我只是通过reset_index()(假设索引使用行号)将行号放入列中。

df.reset_index(inplace=True)

然后我编写了一个 for 循环,其目的是检查每个给定值,如果该值位于给定列中的任何位置(使用 .str.contains() 函数,并且如果所以,在哪里。然后将该信息存储在字典中。请注意,这里我使用 + 来分割您搜索的各种值,因为它看起来是数据集中的有效分隔符,但您可以调整这相应地

#the dictionary will have a key containing row number and the value we searched for
#the value will contain the module and line item values
result = {}
#create a rownumber variable so we know where in the dataset we are
rownumber = -1
#now we just iterate over every row of the Formula series
for row in df['Formula']:
rownumber +=1
#and also every relevant value within that cell
for value in row.split('+'):
#we clean the value from trailing/preceding whitespace
value = value.strip()
#and then we return our key and value and update our dictionary
key = 'row:|:'+str(rownumber)+':|:'+value
value = (df.loc[((df.Formula.str.contains(value,regex=False))) & (df.index!=rownumber),['Module','Line Item']])
result.update({key:value})

我们现在可以将字典解压到列表中,我们在其中进行了匹配:

where_raw = []
what_raw = []
rows_raw = []
for key,value in zip(result.keys(),result.values()):
if 'Empty' in str(value):
continue
else:
where_raw.append(list(value['Module']+' '+value['Line Item']))
what_raw.append(key.split(':|:')[2])
rows_raw.append(int(key.split(':|:')[1]))

tempdf = pd.DataFrame({'row':rows_raw,'where':where_raw,'what':what_raw})

tempdf 现在每个匹配包含一行,但是,我们希望 df 中的每个原始行都包含一行,因此我们将每个主行的所有匹配合并为一个

where = []
what = []
rows = []

for row in tempdf.row.unique():
where.append(list(tempdf.loc[tempdf.row==row,'where']))
what.append(list(tempdf.loc[tempdf.row==row,'what']))
rows.append(row)
result = df.merge(pd.DataFrame({'index':rows,'where':where,'what':what}))

最后我们现在可以通过将结果与原始数据框合并来获得结果

结果 = df.merge(pd.DataFrame({'index':rows,'where':where,'what':what}),how='left',on='index')。 drop('index',axis=1)

最后我们可以添加 repeated 列,如下所示:结果['重复'] = (结果['什么']!='')

 print(result)
Module Line Item Formula what where
Module 1 Line Item 1 hello[SUM: hello2] ['hello[SUM: hello2]'] [['Module 1 Line Item 2']]
Module 1 Line Item 2 goodbye[LOOKUP: blue123] + hello[SUM: hello2] ['goodbye[LOOKUP: blue123]', 'hello[SUM: hello2]'] [['Module 2 Line Item 1'], ['Module 1 Line Item 1']]
Module 2 Line Item 1 goodbye[LOOKUP: blue123] + some other line item ['goodbye[LOOKUP: blue123]'] [['Module 1 Line Item 2']]

关于python - 如何识别 Pandas DataFrame 中列的行中的字符串重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53602854/

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