Muszę zastąpić wartość Columnb z słownikiem mapowania, ale nie mogę podzielić tych kolumn i mapować go, a concat wszystko z powrotem do tego samego miejsca, który byłby żmudnym zadaniem. Każda pomoc byłaby świetna.

Df:

ColumnA   ColumB
0 Rick     3-1,4-5,9-8
1 Tim      6-3,1-2,1.3,5.8,7-9

Mapping_dict= {'3-1':'1','4-5':2,'9-8':3,
'6-3':4,'1-2':5,'1.3':6,'5.8':'7','7-9':'8'}

Wynik:

  ColumnA   ColumB
  0 Rick     1,2,3
  1 Tim      4,5,6,7,8
2
denz franc 7 luty 2021, 17:34

3 odpowiedzi

Najlepsza odpowiedź

Możesz użyć funkcji aplikacji PANDA, aby zmapować oryginalną wartość za pomocą Słownik mapowania:

import pandas as pd

Mapping_dict= {'3-1':'1','4-5':2,'9-8':3,'6-3':4,'1-2':5,'1.3':6,'5.8':'7','7-9':'8'}
d = {'ColumnA': ['Rick', 'Tim'], 'ColumB': ['3-1,4-5,9-8', '6-3,1-2,1.3,5.8,7-9']}
df = pd.DataFrame(data=d)
df['ColumB'] = df['ColumB'].apply(lambda x: [Mapping_dict[y] for y in x.split(',')] )
3
Anja S 7 luty 2021, 14:49

Zakładając, że Mapping_dict zawiera wszystkie wartości jako ciąg, którego możesz używać {X1}} , który akceptuje słownik zastępczy jako argument, który następnie można użyć do wymiany wartości w ColumB:

df['ColumB'] = df['ColumB'].replace(Mapping_dict, regex=True)

>>> df

  ColumnA     ColumB
0    Rick      1,2,3
1     Tim  4,5,6,7,8
2
Shubham Sharma 7 luty 2021, 15:02
ColumnA=['Rick','Tim']  
ColumnB=['3-1,4-5,9-8','6-3,1-2,1.3,5.8,7-9']

df=pd.DataFrame({'columnA':ColumnA,'columnB':ColumnB})

Mapping_dict= {'3-1':'1','4-5':2,'9-8':3,'6-3':4,'1-2':5,'1.3':6,'5.8':'7','7-9':'8'}

def lookup(columnString):
    elements=columnString.split(",")
    mylist=[str(Mapping_dict[element]) for element in elements]
    retVal=",".join(mylist)
    return retVal

df['columnB']=df['columnB'].apply(lambda x: lookup(x))
print(df)
output:

  columnA    columnB
0    Rick      1,2,3
1     Tim  4,5,6,7,8
0
Golden Lion 7 luty 2021, 15:57