【问题标题】:Generate many to many list of dictionary relation from python data frame从python数据框生成多对多字典关系列表
【发布时间】:2019-08-17 23:48:41
【问题描述】:
import pandas as pd
import os

list_of_dict2 = [[{'1580674': ['HA-567034786', 'AB-1018724']}], [{'1554970': ['AB-6348403', 'HA-7298656']}, {'1554970': ['AB-2060953', 'HA-990228']}, {'1554970': ['HA-7287204', 'AB-1092380','GR-33333']}]]

list_of_dict = []
for i in list_of_dict2:
   for j in i:
     list_of_dict.append(list(j.values())[0])

df = pd.DataFrame(list_of_dict)
print(df)

我当前的数据框结果

              0           1         2
0  HA-567034786  AB-1018724      None
1    AB-6348403  HA-7298656      None
2    AB-2060953   HA-990228      None
3    HA-7287204  AB-1092380  GR-33333

使用字典列表,我可以使用以下代码生成数据框。但我的问题是我有一些 多对多字典列表的问题。让我解释一下我想要实现的目标。

例如,对于数据框的每一行,我想让它成为多对多的字典,列表上有多个值。说,最后一个 index 3 我想像下面这样

预期输出:(对于第二个索引)

{ 

    "AB-2060953" : ['HA-990228'],
    "HA-990228" : ['AB-2060953']

}

预期输出:(对于第三个索引)

{ 

"HA-7287204" : ['AB-1092380','GR-33333'],
"AB-1092380" : ['HA-7287204','GR-33333'],
"GR-33333" : ['AB-1092380','HA-7287204']
}

【问题讨论】:

  • 在您的最终预期输出中,为什么是"GR-33333" : ['AB-1092380','GR-33333'] 而不是"GR-33333" : ['AB-1092380','HA-7287204']
  • 谢谢伙计,这是一个错字:P

标签: python pandas list dataframe dictionary


【解决方案1】:

一种方法可能如下:

def make_dict(row):
    s = set(row[~row.isna()])
    return {x: list(s - {x}) for x in s}

df.apply(make_dict, axis=1)

# Output:
0    {'AB-1018724': ['HA-567034786'], 'HA-567034786': ['AB-1018724']}
1    {'AB-6348403': ['HA-7298656'], 'HA-7298656': ['AB-6348403']}
2    {'HA-990228': ['AB-2060953'], 'AB-2060953': ['HA-990228']}
3    {'GR-33333': ['AB-1092380', 'HA-7287204'], 'AB-1092380': ['GR-33333', 'HA-7287204'], 'HA-7287204': ['GR-33333', 'AB-1092380']}
dtype: object

或者,不假设唯一性和处理集合,

df.apply(lambda row: {x: [y for y in row if y and x != y] for x in row if x}, axis=1)

【讨论】:

    猜你喜欢
    • 2016-06-28
    • 1970-01-01
    • 2021-04-03
    • 2020-10-05
    • 2022-01-04
    • 1970-01-01
    • 2017-03-28
    • 2020-01-28
    • 2011-08-22
    相关资源
    最近更新 更多