映射两个数据帧以创建具有多个键值的字典 - 熊猫

时间:2017-10-07 18:06:56

标签: python pandas dictionary dataframe mapping

我想创建一个dictionary,其中包含一个键的多个值。

我有以下DataFrame 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映射这两个DataFrame,并创建一个具有唯一ID且来自df2的{​​{1}} var1 var2var3的多个值的字典列,

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

值可以在列表或元组中。

对于我的情景,我能找到的最接近的是post。但是,当我映射到表时,我想要来自多个列的值。我该如何处理?任何想法,将不胜感激。

1 个答案:

答案 0 :(得分: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"]}'