Как связать идентификаторы с их конкретными значениями в кадре данных панд? - PullRequest
0 голосов
/ 09 ноября 2018

С учетом следующего кадра данных:

Col_1   Col_2   Col_3
1        Yes     A
1        Yes     B
1        No      C
2        No      C
2        Yes     C  
2        No      D
3        Yes     A
3        No      B 
3        No      C
4        Yes     C

Как я могу преобразовать его в словарь, подобный этому:

{1:[
    Col_2:[Yes,Yes, No],
    Col_3:[A,B,C]
    ],
2:[
    Col_2:[No,Yes, No],
    Col_3:[C,C,D]
    ],
3:[
    Col_2:[Yes,No, No],
    Col_3:[A,B,C]
    ],
4:[
    Col_2:[Yes],
    Col_3:[C]

    ]
}

Я пытался:

a_lis = set(df3['Col_1'].values.tolist())


temp_lis =[]
for i,e in enumerate(a_lis):
    lis = df3[df3['Col_1'] == e]['Col_2'].tolist()
    temp_lis.append(lis)
    a_dict = dict(list(enumerate(temp_lis)))

Однако я не получаю нужный словарь. Каков наилучший способ отобразить весь массив данных в словарь с заданным ключом?

1 Ответ

0 голосов
/ 09 ноября 2018

Используйте groupby + agg с list и конвертируйте, используя to_dict с параметром orient='index':

d = df.groupby('Col_1').agg(list).to_dict(orient='index')

print(d)
{1: {'Col_2': ['Yes', 'Yes', 'No'], 'Col_3': ['A', 'B', 'C']},
 2: {'Col_2': ['No', 'Yes', 'No'], 'Col_3': ['C', 'C', 'D']},
 3: {'Col_2': ['Yes', 'No', 'No'], 'Col_3': ['A', 'B', 'C']},
 4: {'Col_2': ['Yes'], 'Col_3': ['C']}}

d = {key:[value] for key,value in d.items()}

print(d)
{1: [{'Col_2': ['Yes', 'Yes', 'No'], 'Col_3': ['A', 'B', 'C']}],
 2: [{'Col_2': ['No', 'Yes', 'No'], 'Col_3': ['C', 'C', 'D']}],
 3: [{'Col_2': ['Yes', 'No', 'No'], 'Col_3': ['A', 'B', 'C']}],
 4: [{'Col_2': ['Yes'], 'Col_3': ['C']}]}

print(df.groupby('Col_1').agg(list))
                Col_2      Col_3
Col_1                           
1      [Yes, Yes, No]  [A, B, C]
2       [No, Yes, No]  [C, C, D]
3       [Yes, No, No]  [A, B, C]
4               [Yes]        [C]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...