我有一个文件,里面有许多不同命名的助记符(“原始助记符”)。我需要将这些命名不好的助记符的名称更改为通用名称(“常规助记符”)。我相信我应该用字典来做这件事,但我不是正面的。
这是一个数据示例(您可以从下面的代码创建数据框):
originalMnemonic = ['ABCGR1','ABCGR2','ABCGR3','ABCGR4','ABCRT1','ABCRT2','ABCRT3','ABCRT4']
generalMnemonic = ['GR','GR','GR','GR','RT','RT','RT','RT']
sourcePriority = [2,3,4,5,1,2,3,4]
curveDf = pd.DataFrame(
{'originalMnemonic': originalMnemonic,
'generalMnemonic': generalMnemonic,
'sourcePriority': sourcePriority
})
我已将每个“原始助记符”赋予“一般助记符”名称,我还提供了源优先级。
如何使用“常规助记符”名称查找和替换“原始助记符”的名称。按源优先顺序排列。 (即如果存在源prioirty 1,则使用1.如果1不存在则使用源优先级2.)
以下是我想要更改的文件的示例:
curveName = ['ABCGR1', 'ABCGR2', 'ABCGR3', 'ABCGR4', 'ABCRT1', 'ABCRT2', 'ABCRT3', 'ABCRT4']
curveDesc = ['I only want this name to be GR','dont change name','dont change name','dont change name',
'I only want this name to be RT','dont change name','dont change name','dont change name']
changeDf = pd.DataFrame(
{'curveName': curveName,
'curveDesc': curveDesc
})
“curveName”应从源优先级顺序更改为“curveDF”中的“常规助记符”名称。
这是我想要的输出:(注意ABCGR1如何更改为GR(源优先级为2,ABCRT1已更改为RT(源优先级为1)
originalMnemonic = ['GR','ABCGR2','ABCGR3','ABCGR4','RT','ABCRT2','ABCRT3','ABCRT4']
generalMnemonic = ['GR','GR','GR','GR','RT','RT','RT','RT']
sourcePriority = [2,3,4,5,1,2,3,4]
outputDf = pd.DataFrame(
{'originalMnemonic': originalMnemonic,
'generalMnemonic': generalMnemonic,
'sourcePriority': sourcePriority
})
outputDf
任何有助于我走上正轨的帮助表示赞赏。
答案 0 :(得分:1)
<强>更新强>
来源DF:
In [141]: curveDf
Out[141]:
generalMnemonic originalMnemonic sourcePriority
0 GR ABCGR1 2
1 GR ABCGR2 3
2 GR ABCGR3 4
3 GR ABCGR4 5
4 RT ABCRT1 1
5 RT ABCRT2 2
6 RT ABCRT3 3
7 RT ABCRT4 4
<强>解决方案:强>
In [142]: curveDf.loc[curveDf.groupby('generalMnemonic', as_index=0) \
.sourcePriority.idxmin(), \
'originalMnemonic'] = curveDf.generalMnemonic
In [143]: curveDf
Out[143]:
generalMnemonic originalMnemonic sourcePriority
0 GR GR 2
1 GR ABCGR2 3
2 GR ABCGR3 4
3 GR ABCGR4 5
4 RT RT 1
5 RT ABCRT2 2
6 RT ABCRT3 3
7 RT ABCRT4 4
说明:
In [140]: curveDf.groupby('generalMnemonic', as_index=0).sourcePriority.idxmin()
Out[140]:
0 0
1 4
dtype: int64
OLD回答:
IIUC你可以这样做:
In [11]: curveDf.loc[curveDf.sourcePriority==1, 'originalMnemonic'] = curveDf.generalMnemonic
In [12]: curveDf
Out[12]:
generalMnemonic originalMnemonic sourcePriority
0 GR GR 1
1 GR ABCGR2 2
2 GR ABCGR3 3
3 GR ABCGR4 4
4 RT RT 1
5 RT ABCRT2 2
6 RT ABCRT3 3
7 RT ABCRT4 4