【问题标题】:Matching some values from a list with values from a column将列表中的某些值与列中的值匹配
【发布时间】:2021-11-07 17:35:14
【问题描述】:

我有以下问题:

我必须列:

我必须为第一列中的每个元素创建一个列表。准确地说,我必须创建以下列表: 元素 1 的第一个列表应包含 [a, g] 对于元素 2:[r, t] 等。

我尝试了一些东西,但我的东西一定不正确

我用来找出第一列中哪些元素重复的代码的第一部分

    values = []
for i in range(2, ws11.max_row+1):
    if ws11.cell(row=i, column=1).value in values:
        pass
    else:
        values.append(ws11.cell(row=i, column=1).value)
print(values)

对于第二部分,我编写了以下代码:

listanew = []
for i in range(1, len(values)+1):
    for j in range(2, ws11.max_row+1):
        if ws11.cell(row=j, column=1).column == values[i-1]:
            listanew.append(ws11.cell(row=j, column=2).value)
print(listanew)

当我尝试打印我的新列表时,我得到了一个空列表。 你能给我一个解决方案吗?

【问题讨论】:

  • 您想从您的示例中找到一个解决方案,其中包含循环以了解您的错误还是使用数据框?

标签: python excel list openpyxl


【解决方案1】:

我冒昧地为这两列命名; “A”和“B”。以下是按“A”列对数据进行分组并获取“B”中所有元素的列表的方法:

df = pd.DataFrame({'A': [1,2,3,4,2,3,4,1],
                   'B': ['a', 'r', 'fg', 'h', 't', 'd', 'd', 'g']})
df = df.groupby('A')['B'].apply(list).reset_index()

【讨论】:

    【解决方案2】:

    使用字典(defaultdict 用于更短的代码):

    from collections import defaultdict
    
    d=defaultdict(list)
    for row in range(1,ws11.max_row+1):
        d[ws11.cell(row,1).value].append(ws11.cell(row,2).value)
    
    d
    defaultdict(<class 'list'>, {1: ['a', 'g'], 2: ['r', 't'], 3: ['fg', 'd'], 4: ['h', 'd']})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-25
      • 1970-01-01
      • 2020-01-12
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      相关资源
      最近更新 更多