2017-01-05 2 views
1

У меня есть файл со многими разными слабо названными мнемониками («оригинальная мнемоника»). Мне нужно изменить имена этих слабо названных мнемоник на общее имя («общая мнемоника»). Я считаю, что должен делать это со словарем, но я не уверен.найти заменять имя по приоритету источника (python)

вот пример данных (вы можете создать dataframe из кода ниже):

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 изменилось к ГР (он имеет исходный приоритет 2, и ABCRT1 изменилось до комнатной температуры (она имеет источник приоритет 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

мог йо u разместите свой желаемый (результирующий) набор данных? – MaxU

+0

Я добавил желаемый результат и изменил часть кода, чтобы иметь больше смысла. Спасибо. – brandog

ответ

1

UPDATE:.

источник 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 
+0

Спасибо, это результат, который я ищу в моем вопросе (но что произойдет, если у меня нет источника Source 1 ?, он не переместится на 2, а затем на 3, а затем на 4). Думаю, мне нужно перефразировать мой вопрос. – brandog

+0

@brandog, было бы намного яснее, если бы вы просто разместили свой ввод и нужные наборы данных с коротким объяснением ... – MaxU

+0

Да, я понимаю. Я просто пытался его упростить и делать это небольшими частями. Мой вопрос намного сложнее, я пытаюсь создать перекрестную таблицу имен по приоритету источника, я вхожу в .las-файлы, используя пакет «lasio», а затем собираю все Mnemonics из них (я соревновался на этом шаге). Затем мне нужно взять все мнемоники, которые я дал «общее имя», и найти/заменить «оригинальную мнемонику» в файле .las. У меня проблемы с упрощением шагов, необходимых для этого. поэтому мой плохо сформулированный вопрос. – brandog

Смежные вопросы