Учитывая этот образец данных:
location emp
0 fac_1 emp1
1 fac_2 emp2
2 fac_2 emp3
3 fac_3 emp4
4 fac_4 emp5
Его можно воссоздать с помощью этого кода:
sample_dict = {'location':['fac_1', 'fac_2', 'fac_2', 'fac_3', 'fac_4'], 'emp':['emp1', 'emp2', 'emp3', 'emp4', 'emp5']}
data = pd.DataFrame(sample_dict)
Я пытаюсь создать словарь со значениями каждого уникального «fac» и всех связанных значений emp. В некоторых рядах есть только один fac и один emp, так что в этом нет ничего страшного. Во многих строках, как в примере, есть два разных значения emp для одного значения fac. (См. fac_2 в образце данных).
Желаемый результат - это один словарь, подобный этому:
{fac_1:emp1, fac_2:[emp2, emp3], fac_3:emp4, fac_4:emp5}
Я смог добиться этого, но с помощью запутанного маршрута, в котором я уверен, у кого-то здесь есть более эффективный и менее подверженный ошибкам способ достижения. Короче говоря, я сгруппировал свой df по fac, а затем использовал iloc, чтобы получить имя fac, и функцию .to_list(), чтобы получить все значения emp в списке, а затем объединить это в словарь.
Что-то вроде этого:
location = data.iloc[0,1]
emp_lst= data['emp'].to_list()
fac_dict = {facility:np_lst}
У кого-то, кто умеет делать словари из фреймов данных pandas, я уверен, есть более эффективный способ добиться желаемого результата. Спасибо, что заглянули!
Ты можешь попробовать
out = data.groupby('location')['emp'].agg(lambda col: list(col) if len(col) >= 2 else col).to_dict()
print(out)
{'fac_1': 'emp1', 'fac_2': ['emp2', 'emp3'], 'fac_3': 'emp4', 'fac_4': 'emp5'}
data.groupby('location')['emp'].agg(list).to_dict()
Выход:
{'fac_1': ['emp1'], 'fac_2': ['emp2', 'emp3'], 'fac_3': ['emp4'], 'fac_4': ['emp5']}
Хорошо, так это гениально! Работал отлично. Огромное спасибо!
Ответ Ynjxsjmh, вероятно, был лучше, поскольку он дает вам запрошенный вами вывод точный, но я рад, что мы смогли помочь.
Да, судя по моему вопросу, вы правы. Увидев ваши ответы, я понял, что мне действительно нужно, чтобы каждое значение было списком, даже если это только одно значение, поэтому я могу перебирать словарь в более позднем коде. Еще раз спасибо!
Спасибо, что нашли время ответить на этот вопрос. Сообщество SO оказало огромную поддержку моему путешествию по программированию, поскольку такие люди, как вы и bert2me, ответили на этот вопрос.