我有一个数据集,其中包含属于相同类别但名称不同的值。我正在考虑创建一个字典,其中的键分配给多个值,然后用键替换列中的值。这就是我拥有的和我想要实现的目标。
定义字典
sspdict={'Eva':["M-EV", "G-EV"],'Re Sci': ['G-RESC', 'M-RESC', 'S-RESC', 'D-RESC'], 'Ed':['G-PO' , 'M-PO'], 'Global':['C-GCC', 'D-GCLA', 'C-LACL']}
数据集:
Col1 Col2 Col3
12 No M-EV
22 Yes G-EV
23 Yes G-RESC
35 No M-PO
34 Yes D-GCLA
46 No S-RESC
89 No G-PO
90 Yes C-GCC
期望的结果
Col1 Col2 Col3
12 No Eva
22 Yes Eva
23 Yes Re Sci
35 No Ed
34 Yes Global
46 No Re Sci
89 No Ed
90 Yes Global
请你帮忙吗?
答案 0 :(得分:1)
让我们试试这个单行:
df.assign(Col3 = df['Col3'].apply(lambda x: [key for key, value in sspdict.items() if x in value][0]))
或者让我们使用发电机:
df.assign(Col3 = df['Col3'].apply(lambda x: next(key for key, value in sspdict.items() if x in value)))
输出:
Col1 Col2 Col3
0 12 No Eva
1 22 Yes Eva
2 23 Yes Re Sci
3 35 No Ed
4 34 Yes Global
5 46 No Re Sci
6 89 No Ed
7 90 Yes Global
答案 1 :(得分:0)
我建议您更改sspdict
数据结构以简化操作,如果sspdict
不大于输入数据集,可能会提高性能。它可能是这样的:
dataset = '''Col1 Col2 Col3
12 No M-EV
22 Yes G-EV
23 Yes G-RESC
35 No M-PO
34 Yes D-GCLA
46 No S-RESC
89 No G-PO
90 Yes C-GCC
'''
sspdict = {'Eva':["M-EV", "G-EV"],'Re Sci': ['G-RESC', 'M-RESC', 'S-RESC', 'D-RESC'], 'Ed':['G-PO' , 'M-PO'], 'Global':['C-GCC', 'D-GCLA', 'C-LACL']}
lookup_dict = {value: key for key, values in sspdict.items() for value in values}
result = ''
for line in dataset.splitlines()[1:]:
key = line.split()[2]
result += line.rstrip(key) + lookup_dict[key] + '\n'
print(result)