考慮到這個示例資料框:
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}
我確信有一些從熊貓資料幀制作字典的技能的人有一種更有效的方法來實作所需的輸出。謝謝參觀!
uj5u.com熱心網友回復:
data.groupby('location')['emp'].agg(list).to_dict()
輸出:
{'fac_1': ['emp1'], 'fac_2': ['emp2', 'emp3'], 'fac_3': ['emp4'], 'fac_4': ['emp5']}
uj5u.com熱心網友回復:
你可以試試
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'}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/471973.html
上一篇:有沒有一種巧妙的方法將串列轉換為映射,其中鍵設定為原始集合的元素,值設定為java中的列舉
下一篇:通過串列更新字典
