Как объединить словари, содержащиеся в кадре данных Pandas, как операцию группировкиPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как объединить словари, содержащиеся в кадре данных Pandas, как операцию группировки

Сообщение Anonymous »

Давайте рассмотрим фрейм данных pandas df, содержащий словари в одном из столбцов (столбец mydict):

mystring mydict
0 a {'key1': 'value1'}
1 a {'key2': 'value2'}
2 b {'key2': 'value2'}


Я хотел бы «объединить» словари как часть операции groupby, например, df.groupby('mystring' )['mydict'].apply(lambda x: merge_dictionaries(x)).
Ожидаемый результат для mystring 'a' будет: {' key1': 'value1', 'key2': 'value2'
Обычный способ объединения словарей — обновить существующий словарь (dict1.update(dict2)), поэтому я не уверен, как это реализовать здесь.
Вот фрагмент кода для создания кадра данных, используемого в этом примере:
mycolumns = ['mystring', 'mydict']
df = pd.DataFrame(columns = mycolumns)
df = df.append(pd.DataFrame(['a', {'key1':'value1'}],mycolumns).T)
df = df.append(pd.DataFrame(['a', {'key2':'value2'}],mycolumns).T)
df = df.append(pd.DataFrame(['b', {'key3':'value3'}],mycolumns).T)
df = df.reset_index(drop=True)

РЕДАКТИРОВАТЬ: способ добиться аналогичного результата без использования groupby — это перебрать mystring и затем обновить словарь:
merged_dict = {}
for mystring in df.mystring.unique():
for mydict in df[df.mystring==mystring]['mydict']:
print(mydict)
merged_dict.update(mydict)

EDIT 2: добавление больше не доступно в pandas 2.0.1. Вот альтернативный фрагмент для создания примера фрейма данных с использованием concat:
mycolumns = ['mystring', 'mydict']
df = pd.DataFrame(columns = mycolumns)
df = pd.concat([df, pd.DataFrame(['a', {'key1':'value1'}],mycolumns).T])
df = pd.concat([df, pd.DataFrame(['a', {'key2':'value2'}],mycolumns).T])
df = pd.concat([df, pd.DataFrame(['b', {'key3':'value3'}],mycolumns).T])
df = df.reset_index(drop=True)


Подробнее здесь: https://stackoverflow.com/questions/785 ... -operation
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»