从具有重复值的 pandas 列中的值创建字典

creating dictionaries from values in pandas columns with repeating values

考虑这个示例数据框:

   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,所以没什么大不了的。在许多行中,如示例中所示,一个 fac 值有两个不同的 emp 值。 (请参阅示例数据框中的 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']}