我正在尝试实现一个代码,该代码读取 csv 文件,从中创建一个数据框,然后为每一行标记键的名称(如果该行中的一列包含与键中相同的字符串)数据框。
作为示例,我定义了以下字典:
Sdiction={
"Mgage" : ["ABC Gage","XYZ Gage"],
"Rate" : ["deg/min","rad/s","rpm"]}
我有以下数据框:
A 栏 | B 栏 | C 座 | D 座 |
---|---|---|---|
1 | 30 | ABC 计 | |
2 | 45 | 度/分钟 | |
3 | 150 | 量规 |
我想将每行的 D 列标记为
第 1 行 - D 列 = Mgage(因为 ABC Gage 存在于密钥 Mgage 中)
第 2 行 - D 栏 = 速率(因为关键速率中存在度/分钟)
第 3 行 - Col D = Mgage(因为字符串 Gage 存在于键 Mgage 中,尽管是部分存在)
我正在尝试弄清楚如何实现这部分,尚未实现,因此需要帮助。
使用正则表达式匹配:
import re
s = df['Col C'].str.casefold()
pattern = '(%s)' % '|'.join(map(re.escape, s))
# '(abc\\ gage|deg/min|gage)'
# reverse dictionary
tmp = pd.Series({v.casefold(): k for k, l in Sdiction.items()
for v in l}, name='ref').reset_index()
# extract first match, map reference key
df['Col D'] = s.map(tmp.assign(match=tmp['index'].str.extract(pattern))
.dropna(subset=['match'])
.set_index('match')['ref']
)
输出:
Col A Col B Col C Col D
0 1 30 ABC Gage Mgage
1 2 45 deg/min Rate
2 3 150 Gage Mgage