数据帧行中的类Python

2024-09-28 03:20:14 发布

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

我在Python中面临一个问题。 我有一个数据帧,我只想得到不同列的可能性。 例如,我有:

import pandas as pd
df = pd.DataFrame({
                'name':['Dupont','Dupant','Darang','BA','Scatt','Sieb'],
                'ID': ['789985','789852','9852220','015220','015221','10022']
              })

enter image description here

我想知道如何处理此数据帧以获得以下结果:

df = pd.DataFrame({
                'name':['Dupont','Dupant','BA','Scatt'],
                'ID': ['789985','789852','015220','015221']
              })

df

enter image description here

如有任何意见或建议,将不胜感激


Tags: 数据nameimportiddataframepandasdfas
1条回答
网友
1楼 · 发布于 2024-09-28 03:20:14

我试过一些东西,但很复杂。改变字母组合的可能性是“无止境的”(好吧,它基本上不是无止境的,而是n!,这是很多)。我设法将其作为条件:

  1. 不区分大小写
  2. 如果所提供单词的一个字符不同
  3. 如果所提供单词的一个字符缺失
  4. 如果完全一样的话

这是我的代码认为的可能性的组合:

['Dupont', 'dupont', 'upont', 'dpont', 'duont', 'dupnt', 'dupot', 'dupon']
['Dupant', 'dupant', 'upant', 'dpant', 'duant', 'dupnt', 'dupat', 'dupan']
['Darang', 'darang', 'arang', 'drang', 'daang', 'darng', 'darag', 'daran']
['BA', 'ba', 'a', 'b']
['Scatt', 'scatt', 'catt', 'satt', 'sctt', 'scat', 'scat']
['Sieb', 'sieb', 'ieb', 'seb', 'sib', 'sie']
['789985', '789985', '89985', '79985', '78985', '78985', '78995', '78998']
['789852', '789852', '89852', '79852', '78852', '78952', '78982', '78985']
['9852220', '9852220', '852220', '952220', '982220', '985220', '985220', '985220', '985222']
['015220', '015220', '15220', '05220', '01220', '01520', '01520', '01522']
['015221', '015221', '15221', '05221', '01221', '01521', '01521', '01522']
['10022', '10022', '0022', '1022', '1022', '1002', '1002']

我似乎无法理解编写if语句的逻辑:

  1. 如果字符被添加到提供的单词中;杜邦,杜邦
  2. 如果所提供单词的多个字符不同>;杜邦,杜邦
  3. 如果所提供单词的多个字符缺失>;杜邦
  4. 如果字符顺序不正确;杜邦公司
  5. 。。。。还有很多我没有考虑的因素

关于你的声明:

我所需要的就是返回看起来相同的数据,即使添加或删除了一个字符,或者不遵守顺序

这并不像你想象的那么简单,事实上,这很复杂。 有很多假设我们没有讨论,举一些例子:

  • 123456>;654321(不遵守命令)
  • 123456>;123465(不遵守订单)
  • 123456>;1234567(添加一个字符)
  • 123456>;123467(添加一个字符,缺少一个字符)
  • 123456>;7654321(添加一个字符,不遵守顺序)
  • 杜邦公司;甜甜圈(缺少一个字符,不遵守顺序)
  • 杜邦公司;Dont(缺少两个字符,遵守顺序)

这些是我的代码中未包含的一些示例(将被过滤掉,不会被视为类似条目)

话虽如此,这是我的代码:

name = ['Dupont', 'Dupant', 'Darang', 'BA', 'Scatt', 'Sieb']
ID = ['789985','789852','9852220','015220','015221','10022']

df = pd.DataFrame({'name': name, 'ID': ID})
print('This is df\n', df)
keys = list(df.keys())

keepindex = []
for col in range(len(keys)):
    allwords = []
    for i in range(len(df)):
        removeoneletteridx = []
        wordvariation = [df[f'{keys[col]}'][i], df[f'{keys[col]}'][i].lower()]
        for j in range(len(df[f'{keys[col]}'][i])):
            idxlist = list(range(len(df[f'{keys[col]}'][i])))
            idxlist.pop(j)
            removeoneletteridx.append(idxlist)
            word = ''.join([df[f'{keys[col]}'][i][x] for x in idxlist])
            wordvariation.append(word.lower())
        allwords.append(wordvariation)

    fulllist = []
    for i in range(len(df)):
        listtocompare = []
        for j in range(len(allwords)):
            for k in range(len(allwords[j])):
                if j != i:
                    listtocompare.append(allwords[j][k])
        fulllist.append(listtocompare)

    for i in range(len(allwords)):
        for j in range(len(allwords[i])):
            if allwords[i][j] in fulllist[i]:
                if i not in keepindex:
                    keepindex.append(i)
                break

new_df = df.iloc[keepindex,:]
print('\nThis is new_df\n',new_df)

print命令给出的输出是:

This is df
      name       ID
0  Dupont   789985
1  Dupant   789852
2  Darang  9852220
3      BA   015220
4   Scatt   015221
5    Sieb    10022

This is new_df
      name      ID
0  Dupont  789985
1  Dupant  789852
3      BA  015220
4   Scatt  015221

并给出一些注释:

  • 从列nameDupont and Dupant被认为是相同的
  • ID列:789985 and 789852015220 and 015221被认为是相同的

如果我同意这一说法:

我所需要的就是返回看起来相同的数据,即使添加或删除了一个字符,或者不遵守顺序

然后,带有ID10022的第5行应被视为与015220相同,因为015220>10022:缺少一个字符,不遵守顺序

所有的事情,所有的,这种条件作用是非常复杂的。我确信我的代码遗漏了很多东西

相关问题 更多 >

    热门问题