Python 将col中的唯一值替换为list-PANDES

Python 将col中的唯一值替换为list-PANDES,python,pandas,Python,Pandas,我希望用一个列表中的值替换一个表中的唯一值。我希望使用唯一值的顺序,而不是对replace()使用硬编码值。使用下面的df,我想使用lst,并在Val3中使用唯一的值。因此,对于第一个唯一值,使用lst[0],第二个使用lst[1] import pandas as pd df = pd.DataFrame({'Val1': [1, 4, 7, 10, 12, 12], 'Val2': ['12', '14', '14', '13', '15', '15'],

我希望用一个列表中的值替换一个表中的唯一值。我希望使用唯一值的顺序,而不是对
replace()
使用硬编码值。使用下面的
df
,我想使用
lst
,并在
Val3
中使用唯一的值。因此,对于第一个唯一值,使用
lst[0]
,第二个使用
lst[1]

import pandas as pd

df = pd.DataFrame({'Val1': [1, 4, 7, 10, 12, 12],
               'Val2': ['12', '14', '14', '13', '15', '15'],
               'Val3': ['X', 'Y', 'X', 'Y', 'Y', 'X']})

lst = ['A','B']
注:

我不能使用:

df['Val3'] = df['Val3'].replace('X','A')
df['Val3'] = df['Val3'].replace('Y','B')

因为
Val3
中的值会有所不同,所以我希望这是动态的。

替换会获取一个列表,这样您就可以获取该系列的
唯一的
,并替换为列表(确保列表的长度与该系列中唯一值的长度相匹配):



replace获取一个列表,这样您就可以获取该系列的
唯一
,并替换为该列表(确保列表的长度与该系列中唯一值的长度匹配):



一般解决方案(如果可能)是创建字典,替换不同数量的值-此处不替换最后一个值
Z

df = pd.DataFrame({'Val1': [1, 4, 7, 10, 12, 12],
               'Val2': ['12', '14', '14', '13', '15', '15'],
               'Val3': ['X', 'Y', 'X', 'Y', 'Y', 'Z']})

lst = ['A','B']
df['Val3'] = df['Val3'].replace(dict(zip(df['Val3'].unique(),lst)))
print (df)
   Val1 Val2 Val3
0     1   12    A
1     4   14    B
2     7   14    A
3    10   13    B
4    12   15    B
5    12   15    Z
如果要将列表中的所有值替换为第一个值,并将所有其他VAL替换为相同的默认值,请使用:

如果始终按列表和性能的值的数量匹配唯一值的数量,则使用numpy索引很重要-将
lst
转换为aray,方法是:


一般解决方案(如果可能)是创建字典,替换不同数量的值-此处不替换最后一个值
Z

df = pd.DataFrame({'Val1': [1, 4, 7, 10, 12, 12],
               'Val2': ['12', '14', '14', '13', '15', '15'],
               'Val3': ['X', 'Y', 'X', 'Y', 'Y', 'Z']})

lst = ['A','B']
df['Val3'] = df['Val3'].replace(dict(zip(df['Val3'].unique(),lst)))
print (df)
   Val1 Val2 Val3
0     1   12    A
1     4   14    B
2     7   14    A
3    10   13    B
4    12   15    B
5    12   15    Z
如果要将列表中的所有值替换为第一个值,并将所有其他VAL替换为相同的默认值,请使用:

如果始终按列表和性能的值的数量匹配唯一值的数量,则使用numpy索引很重要-将
lst
转换为aray,方法是:

df = pd.DataFrame({'Val1': [1, 4, 7, 10, 12, 12],
               'Val2': ['12', '14', '14', '13', '15', '15'],
               'Val3': ['X', 'Y', 'X', 'Y', 'Y', 'Z']})

lst = ['A','B']
df['Val3'] = df['Val3'].replace(dict(zip(df['Val3'].unique(),lst)))
print (df)
   Val1 Val2 Val3
0     1   12    A
1     4   14    B
2     7   14    A
3    10   13    B
4    12   15    B
5    12   15    Z
df = pd.DataFrame({'Val1': [1, 4, 7, 10, 12, 12],
               'Val2': ['12', '14', '14', '13', '15', '15'],
               'Val3': ['X', 'Y', 'X', 'Y', 'W', 'Z']})

lst = ['A','B']
df['Val3'] = df['Val3'].map(dict(zip(df['Val3'].unique(),lst))).fillna('Other')
print (df)
   Val1 Val2   Val3
0     1   12      A
1     4   14      B
2     7   14      A
3    10   13      B
4    12   15  Other
5    12   15  Other
lst = ['A','B']
df['Val3'] = np.array(lst)[pd.factorize(df['Val3'].to_numpy())[0]]
print (df)
   Val1 Val2 Val3
0     1   12    A
1     4   14    B
2     7   14    A
3    10   13    B
4    12   15    B
5    12   15    B