映射两个数据框为一个键创建一个包含多个值的字典 - 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地图和创建具有从df2
的var1
,var2
和var3
列独特的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"]}'
谢谢!这是一个好方法。不过,我只需要我只需要'var1','var2'和'var3'。另外,当我有很多记录时,我认为这种方法会花费很多时间。 –
@ i.n.n.m好的,添加了对Var1,Var2,Var3 –
的限制,还有其他一些列有大约100多万条记录,并且花了很长时间。现在我只限于列,它的工作原理。我正在尝试这个,在这里,https://stackoverflow.com/questions/44713968/pandas-dataframe-to-dict-on-multiple-columns-and-values-to-list/44713994#comment80198211_44713994。我猜,区别是在代码中使用'stack()'来添加多列? –