Создайте список слов для многих из многих из фрейма данных Python - PullRequest
0 голосов
/ 27 марта 2019
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)

My Current dataframe result

              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

, используя список словаря. Я могу сгенерировать кадр данных с помощью моего кода ниже.Но моя проблема в том, что у меня возникла проблема с тем, чтобы сделать список многие ко многим словарям .Позвольте мне объяснить, чего я хочу достичь.

Например, для каждой строки фрейма данных я хочу сделать его много-много словарей с несколькими значениями в списке.Скажем, с последним индексом 3 я хочу сделать так, как показано ниже

Ожидаемый результат: (для 2-го индекса)

{ 

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

}

Ожидаемый результат: (для 3-го индекса)

{ 

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

1 Ответ

1 голос
/ 27 марта 2019

Один из подходов может быть следующим:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...