python - 如何从一组列创建映射字典
问题描述
我有一个如下所示的 Pandas DataFrame:
import numpy as np
import pandas as pd
data = np.random.rand(18).reshape(-1, 6)
data = pd.DataFrame(data, columns = ['var1_x10', 'var2_x10', 'var3_x10', 'var1_x20', 'var2_x20', 'var3_x20'])
var1_x10 var2_x10 var3_x10 var1_x20 var2_x20 var3_x20
0 0.171464 0.441099 0.936246 0.532478 0.128823 0.211489
1 0.917217 0.544899 0.589996 0.362159 0.774122 0.439542
2 0.094015 0.582171 0.573968 0.200833 0.257705 0.057575
如您所见,列实际上是每个原始列var1
、var2
、的 2 个转换var3
。现在我想以字典的形式创建一个映射,其中原始列名作为键,转换后的列名列表作为值:
my_dict = {'var1': ['var1_x10', 'var1_x20'],
'var2': ['var2_x10', 'var2_x20'],
'var3': ['var3_x10', 'var3_x20']}
我怎样才能做到这一点?
解决方案
使用Series.groupby
with 将列转换为系列split
并转换为list
:
d = data.columns.to_series().groupby(lambda x: x.split('_')[0]).apply(list).to_dict()
print (d)
{'var1': ['var1_x10', 'var1_x20'],
'var2': ['var2_x10', 'var2_x20'],
'var3': ['var3_x10', 'var3_x20']}
另一种解决方案:
from collections import defaultdict
d = defaultdict (list)
for x in data.columns:
d[x.split('_')[0]].append(x)
print (dict(d))
{'var1': ['var1_x10', 'var1_x20'],
'var2': ['var2_x10', 'var2_x20'],
'var3': ['var3_x10', 'var3_x20']}
推荐阅读
- c# - 数据库备份不成功
- php - SQL Query 在没有 WHERE 的情况下工作,但是一旦我添加 WHERE 语句,它就无法正常运行
- c - 使用 const 复合文字的元素初始化静态变量
- vue-storefront - 向 vue-storefront 提交新模块有什么要求?
- sql-server - 有没有办法知道dts花了多长时间?
- spring-cloud-config - Spring Cloud Server 为同一个应用程序提供多个属性文件
- amazon-web-services - 如何在 AWS Route53 服务中使用 terraform 创建多值 SRV DNS 记录?
- java - 在另一个类的访问器中从不同的类调用方法(作业)
- linux - 执行脚本时出现“不明确的重定向”错误
- javascript - 如果文件 A 不存在,如何导入文件 B?