Вопрос:
Позвольте мне предисловие к этому вопросу, отметив, что комбинированный столбец не является словарем. Результирующий фреймворк имеет квадратные скобки внутри “комбинированного” столбца, поэтому он отображается как список в формате dataframe внутри него [key1: value1, key2: value2 и т.д.].
Я пытаюсь преобразовать свой dataframe из этого:
import pandas as pd test = pd.DataFrame({‘apples’:[‘red’,’green’,’yellow’], ‘quantity’: [1,2,3],’tasteFactor’:[‘yum’,’yum’,’yuck’]}) apples quantity tasteFactor 0 red 1 yum 1 green 2 yum 2 yellow 3 yuck
В этот формат, который объединяет ключи со значениями в каждой строке в новый столбец:
apples quantity tasteFactor combined 0 red 1 yum [‘apples’:’red’,’quantity’:’1′,’tastefactor’:’yum’] 1 green 2 yum [‘apples’:’green’,’quantity’:’2′,’tastefactor’:’yum’] 2 yellow 3 yuck [‘apples’:’yellow’,’quantity’:’3′,’tastefactor’:’yuck’]
Пытался превратить dataframe в словарь на строку, но застрял в преобразовании в список.
test[‘combined’] = test.to_dict(orient=’records’)
Полученный новый столбец не обязательно должен быть фактическим типом списка. Это может быть строка.
Ранее задал этот вопрос здесь, но хотел уточнить вопрос в названии в этом вопросе. Как создать список из словаря в DataFrame в Python
Нашли следующие тесно связанные вопросы и попробовали их вывод, который получает меня наполовину, но, похоже, не может точно соответствовать правильному формату.
- Объединить столбцы в Pandas DataFrame с столбцом списков в DataFrame
- Объединить значения нескольких столбцов в один столбец в python pandas
- Преобразование DataFrame в словарь со значениями в списке
- Как создать словарь ключа: column_name и значение: уникальные значения в столбце в python из фрейма данных
Лучший ответ:
Вы можете сделать это с помощью метода apply для pandas dataframes
import pandas as pd df = pd.DataFrame({‘apples’:[‘red’,’green’,’yellow’], ‘quantity’: [1,2,3],’tasteFactor’:[‘yum’,’yum’,’yuck’]}) col_names = df.columns def func(row): global col_names list_ = [str(b)+’:’+str(a) for a,b in zip(row,col_names.values.tolist())] return list_ x = list(map(func, df.values.tolist())) df.loc[:,’combined’] = pd.Series(x) # df # apples quantity tasteFactor combined # 0 red 1 yum [apples:red, quantity:1, tasteFactor:yum] # 1 green 2 yum [apples:green, quantity:2, tasteFactor:yum] # 2 yellow 3 yuck [apples:yellow, quantity:3, tasteFactor:yuck] Ответ №1
Как вы упомянули В результате новый столбец не должен быть фактическим типом списка.
di=test.T.to_dict() test[‘Mapper’]=test.index test.Mapper.map(di) test.assign(combined=test.Mapper.map(di)).drop(‘Mapper’,1) Out[493]: apples quantity tasteFactor combined 0 red 1 yum {‘apples’: ‘red’, ‘quantity’: 1, ‘tasteFactor’… 1 green 2 yum {‘apples’: ‘green’, ‘quantity’: 2, ‘tasteFacto… 2 yellow 3 yuck {‘apples’: ‘yellow’, ‘quantity’: 3, ‘tasteFact…
РЕДАКТИРОВАТЬ:
di=test.T.to_dict() test[‘Mapper’]=test.index test.Mapper.map(di) test=test.assign(combined=test.Mapper.map(di).astype(str)).drop(‘Mapper’,1) test=test.combined.str.replace(‘{‘,'[‘).str.replace(‘}’,’]’) test.combined[0] Out[511]: «[‘apples’: ‘red’, ‘quantity’: 1, ‘tasteFactor’: ‘yum’]»