映射两个数据框为一个键创建一个包含多个值的字典 - Pandas

问题描述:

我想创建一个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。但是,当我映射到表时,我需要来自多个列的值。我如何继续?任何想法,将不胜感激。

让我们试试这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://*.com/questions/44713968/pandas-dataframe-to-dict-on-multiple-columns-and-values-to-list/44713994#comment80198211_44713994。我猜,区别是在代码中使用'stack()'来添加多列? –