2017-10-07 38 views
1

我想創建一個dictionary,它將具有多個鍵的值。映射兩個數據框爲一個鍵創建一個包含多個值的字典 - Pandas

我有以下的數據幀df1這樣的:

ID  SUM  COUNT 
2 3002 256401.0 15 
1 3021 5412.49  21 
4 3022 45454.12 12 
3 3025 15487.23 45 
5 3026 154876.1 88 

而且我想對ID的映射到大的查找表來獲得多個值爲每個ID。我的另一個查找表df2看起來像這樣,

ID  Var1 Var2 Var3 Var4 
0 3021 Cfd45 shkjs shkjs 465 
1 3021 sfs  None fjslk 323 
2 3021 hjfks shka fsad 457 
3 3022 None skank vssf 236 
4 3022 sdkj vbjajl bbf  124 
5 3025 klgf vcbj jgjg 895 
6 3026 tuo  None gdsfs 457 
7 3026 klo  ahk  None 569 
8 3026 nbjd alkdjl sfsfs 124 

現在,我想通過ID這兩個DataFrames地圖和創建具有從df2var1var2var3列獨特的ID和多值的字典,

{3021: ['Cfd45', 'shkjs', 'sfs', 'jkdg', 'fjslk', 'hjfks', 'shka', 'fsad'], 
3022: ['skank', 'vssf', 'sdkj', vbjajl', 'bbf'], 
3025: ...} 

這些值可以在列表或元組中。

對於我的情況,我能找到的最接近的是這個post。但是,當我映射到表時,我需要來自多個列的值。我如何繼續?任何想法,將不勝感激。

回答

1

讓我們試試這DF2:

df2.set_index('ID')[['Var1','Var2','Var3']].stack().groupby(level=0).apply(lambda x: x.unique()).to_dict() 

輸出:

{3021: array(['Cfd45', 'shkjs', 'sfs', 'None', 'fjslk', 'hjfks', 'shka', 'fsad'], dtype=object), 
3022: array(['None', 'skank', 'vssf', 'sdkj', 'vbjajl', 'bbf'], dtype=object), 
3025: array(['klgf', 'vcbj', 'jgjg'], dtype=object), 
3026: array(['tuo', 'None', 'gdsfs', 'klo', 'ahk', 'nbjd', 'alkdjl', 'sfsfs'], dtype=object)} 

OR

df2.set_index('ID')[['Var1','Var2','Var3']].stack().groupby(level=0).apply(lambda x: x.unique()).to_json() 

輸出:

'{"3021":["Cfd45","shkjs","sfs","None","fjslk","hjfks","shka","fsad"],"3022":["None","skank","vssf","sdkj","vbjajl","bbf"],"3025":["klgf","vcbj","jgjg"],"3026":["tuo","None","gdsfs","klo","ahk","nbjd","alkdjl","sfsfs"]}' 
+0

謝謝!這是一個好方法。不過,我只需要我只需要'var1','var2'和'var3'。另外,當我有很多記錄時,我認爲這種方法會花費很多時間。 –

+0

@ i.n.n.m好的,添加了對Var1,Var2,Var3 –

+0

的限制,還有其他一些列有大約100多萬條記錄,並且花了很長時間。現在我只限於列,它的工作原理。我正在嘗試這個,在這裏,https://stackoverflow.com/questions/44713968/pandas-dataframe-to-dict-on-multiple-columns-and-values-to-list/44713994#comment80198211_44713994。我猜,區別是在代碼中使用'stack()'來添加多列? –

相關問題