首页 > 解决方案 > 如何根据具有列表值的字典键对数据进行分组?

问题描述

我有一个包含我们可以称之为序列前缀的 excel 文件。

这是我的输入。

PFX_CD   SERIAL             STATUS
PR7     PR700300        NB RJ SR XR RC NV
6QN     6QN00274        NB AC NV NS AA FA
MSR     MSR00443        NB AC NV NS AA FA
MSR     MSR00450        NB AC NV NS AA FA
ER9     ER900471        NB AC NV NS AA FA

如果我有像下面这样的字典

manulocation = {
    '115':['PR7', '6QN'],
    '116':['MSR', 'TK9', 'GGG'],
    '117':['ER9', 'NNA',]
}

如何按键将数据与新列分组?像这样。

这是我追求的输出

PFX_CD   SERIAL             STATUS          Line
PR7     PR700300        NB RJ SR XR RC NV   115
6QN     6QN00274        NB AC NV NS AA FA   115
MSR     MSR00443        NB AC NV NS AA FA   116
MSR     MSR00450        NB AC NV NS AA FA   116
ER9     ER900471        NB AC NV NS AA FA   117

标签: pandaspandas-groupby

解决方案


与字典中交换的键和列表一起用于Series.map“扁平化”字典,所有列表中只有必要的唯一值:

#http://stackoverflow.com/a/31674731/2901002
d = {k: oldk for oldk, oldv in manulocation.items() for k in oldv}
print (d)

{'PR7': '115', '6QN': '115', 'MSR': '116', 
 'TK9': '116', 'GGG': '116', 'ER9': '117', 'NNA': '117'}

df['Line'] = df['PFX_CD'].map(d)
print (df)

  PFX_CD    SERIAL             STATUS Line
0    PR7  PR700300  NB RJ SR XR RC NV  115
1    6QN  6QN00274  NB AC NV NS AA FA  115
2    MSR  MSR00443  NB AC NV NS AA FA  116
3    MSR  MSR00450  NB AC NV NS AA FA  116
4    ER9  ER900471  NB AC NV NS AA FA  117

推荐阅读