Объединение нескольких строк в одну строку столбца фрейма данных

Моя текущая структура данных была такой, как показано ниже,

              0           1         2
0  HA-567034786  AB-1018724      None
1    AB-6348403  HA-7298656      None

После использования apply() я просто делаю это так:

def make_dict(row):
    s = set(x for x in row if x)
    return {x: list(s - {x}) for x in s}

result = df.apply(make_dict, axis=1).to_frame(name = 'duplicates')

                                duplicates
1    {'HA-567034786': ['AB-1018724'],'AB-1018724':['HA-567034786']}                                                                            
2    {'AB-6348403': ['HA-7298656'],'HA-7298656':['AB-6348403']}   

Теперь я застрял на том, чтобы сделать его одномерным словарем, как показано ниже,

{
  'HA-567034786': ['AB-1018724'],'AB-1018724':['HA-567034786'],
  'AB-6348403': ['HA-7298656'],'HA-7298656':['AB-6348403']
}  
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
47
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вместо этого apply используйте понимание словаря со сглаживанием:

print (df)
              0           1
0  HA-567034786  AB-1018724
1    AB-6348403  HA-7298656

def make_dict(row):
    s = set(x for x in row if x)
    return {x: list(s - {x}) for x in s}

result = {k:v for x in df.values for k, v in make_dict(x).items()}

print (result)
{'HA-567034786': ['AB-1018724'],
 'AB-1018724': ['HA-567034786'], 
 'HA-7298656': ['AB-6348403'],
 'AB-6348403': ['HA-7298656']}

Другое решение с apply:

result = {k:v for x in df.apply(make_dict, axis=1) for k, v in x.items()}

Ты звездный друг :)

Always Sunny 28.03.2019 10:03

Также вы можете использовать коллекции.ChainMap() для группировки всех словарей в один как:

from collections import ChainMap
res =dict(ChainMap(*result['duplicates']))

Другие вопросы по теме