映射两个数据框以创建一个包含多个键值的字典 - Pandas
Posted
技术标签:
【中文标题】映射两个数据框以创建一个包含多个键值的字典 - Pandas【英文标题】:Map Two Data Frames to create a dictionary with multiple values for a key - Pandas 【发布时间】:2018-03-19 07:20:13 【问题描述】:我想创建一个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
的 var1
、var2
和 var3
列的多个值,
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)
或
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 的限制
不错,其他一些列的记录超过一百万条,花了很长时间。现在我仅限于列,它可以工作。我正在尝试这个,在这里,***.com/questions/44713968/…。我猜,区别是在你的代码中使用stack()
来添加多列?
是的,我正在使用 stack() 将所有 thos Var 对齐到单个列中,使用与该 SO 帖子中描述的相同技术,除了我得到唯一值。以上是关于映射两个数据框以创建一个包含多个键值的字典 - Pandas的主要内容,如果未能解决你的问题,请参考以下文章
如何比较每个字典中 JSON Array 键值的字符串以查看它们是不是包含 NSUserDefault 字符串并返回 JSON 字典匹配项