Преобразование столбцов DataFrame в словарные ключи - PullRequest
1 голос
/ 18 апреля 2019

Я пытался преобразовать три столбца DataFrame в словарные ключи.

Я пытался использовать цикл для преобразования каждого столбца и отслеживания групп крови рабочих.Группы крови не должны повторяться.

Name = df[:,['Name1','Name2','Name3']] 
Names = {}
Bloodtypes = {}
for i,key,key2 in enumerate(zip(...)):
    if key  in Names[key] and key in Blood types[key]:
        Names[key].append(i)
        Blood types[key].append(key2)
    else:
        Names[key]=[i]
        Blood types[key]=[key2]

     Blood Type    Name1    Name2    Name3
0    A             NaN       NaN      John
1    O             Adam     Smith     NaN
2    B             NaN      John       NaN   
3    AB            NaN       NaN       NaN
4    A             NaN       NaN       NaN
5    B             NaN       NaN       NaN

Я ожидаю следующего.

 Bloodtypes = {"Blank":['AB','A','B'],""John":['A','B'],("Adam","Smith"):['O']}
 Names = {"Blank":[3,4,5],""John":[0,2],("Adam","Smith"):[1]}

1 Ответ

2 голосов
/ 18 апреля 2019

Здесь мы используем stack для создания нового ключа, затем groupby to_dict

df['Newkey']=df[['Name1','Name2','Name3']].stack().groupby(level=0).apply(tuple)
df.Newkey=df.Newkey.fillna('Blank')
df.groupby('Newkey')['BloodType'].apply(list).to_dict()
Out[471]: {'Blank': ['AB', 'A', 'B'], ('John',): ['A', 'B'], ('Adam', 'Smith'): ['O']}
df.reset_index().groupby('Newkey')['index'].apply(list).to_dict()
Out[472]: {'Blank': [3, 4, 5], ('John',): [0, 2], ('Adam', 'Smith'): [1]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...