Давайте рассмотрим фрейм данных 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
Как объединить словари, содержащиеся в кадре данных Pandas, как операцию группировки ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Различные значения в группе по столбцам до и после группировки в кадре данных pandas
Anonymous » » в форуме Python - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-