Как я могу обновить строки Dataframe, чтобы сделать их словарём с именами столбцов? - PullRequest
1 голос
/ 28 февраля 2020

У меня есть такой фрейм данных.

ID  Name id2 name2
101  A    1   d_a
103  B    2   d_b
101  A    3   d_c
103  B    4   d_d

, и я хочу вывод df вот так.

ID   Name id2                     name2
101  A    [{'id2':1},{'id2':3}]  [{'name2':'d_a'},{'name2':'d_c'}]
103  B    [{'id2':2},{'id2':4}]  [{'name2':'d_b'},{'name2':'d_d'}]

1 Ответ

0 голосов
/ 28 февраля 2020

Использовать понимание списка с DataFrame.to_dict:

df1 = pd.DataFrame([[df[[x]].to_dict('r') for x in df]], columns=df.columns)
print (df1)
                                      col1  \
0  [{'col1': 1}, {'col1': 2}, {'col1': 3}]   

                                                col2  
0  [{'col2': 'def'}, {'col2': 'bb'}, {'col2': 'ra'}]  

РЕДАКТИРОВАТЬ: Используйте GroupBy.apply с лямбда-функцией:

cols = ['id2','name2']
df2 = df.groupby(['ID','Name'])[cols].agg(lambda x: x.to_frame().to_dict('r')).reset_index()
print (df2)
    ID Name                       id2                                 name2
0  101    A  [{'id2': 1}, {'id2': 3}]  [{'name2': 'd_a'}, {'name2': 'd_c'}]
1  103    B  [{'id2': 2}, {'id2': 4}]  [{'name2': 'd_b'}, {'name2': 'd_d'}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...