pandas - 如何根据具有列表值的字典键对数据进行分组?
问题描述
我有一个包含我们可以称之为序列前缀的 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
解决方案
与字典中交换的键和列表一起用于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
推荐阅读
- r - 有没有办法根据匹配的列值比较两个不同长度的数据帧?
- python - 如何根据索引添加子列表的元素 - Python
- javascript - 如何判断 Svelte 组件是否完全是静态内容?
- java - 如何从JAVA中String中的列中获取特定部分
- php - 扩展类以在原始类生成的 html 中插入新的 html 元素
- python - 带有套接字的python代码中的AttributeError
- angular - 如何从 Angular 中的服务方法访问属性?
- python - 为什么 list.remove() 不能“正常”工作?
- ruby-on-rails - 添加carrierwave-AWS配置后无法启动rails服务器
- php - 数据表:根据数据更改行颜色