替换数据帧Python的一列中的多个值

2024-10-03 13:28:44 发布

您现在位置:Python中文网/ 问答频道 /正文

成千上万的值需要用更简单的命名格式来代替。例如,原始数据帧的命名是AB5648、CD5678、EF5468等,需要根据我创建的对应表用HH_1、HH_2、HH_3等替换。 对应表包括要替换和要替换的值

Original file = df_temp 

Filename = 'HH_number_Old.csv'
Filename = 'HH_number_New.csv'

Old                     New
AB1321                 HH_1
CD5678                 HH_2
EF5468                 HH_3
EF5468                 HH_3
EF5438                 HH_4
EF5368                 HH_5
EF5068                 HH_6
EF5468                 HH_7
EF5458                 HH_8
EF5168                 HH_9
.....                 .....
XZ5465                HH_3000

我试过了

for i in range (3000):
    print(HH_number_old[i])
    print(HH_number_new[i])

    temp_fin = df_temp.replace({HH_contract[i], HH_no[i]}, inplace=True) 
          #temp_fin is the resultant dataframe with replaced values

Result = temp_fin file is empty.

当我尝试以下特定数量的[I]时,替换工作正常

temp_fin = df_temp.replace (HH_number_old[1], HH_number_new[1])


Tags: csvnumberdfnewhhfilename命名temp
2条回答

使用^{}

df['new'] = 'HH_' + df['To_be_replaced'].rank(method='dense').astype(int).astype(str)

^{}

df['new'] = 'HH_' + df.groupby('To_be_replaced', sort=False).ngroup().add(1).astype(str)

print (df)
  To_be_replaced To_replace   new
0         AB1321       HH_1  HH_1
1         CD5678       HH_2  HH_2
2         EF5468       HH_3  HH_3
3         EF5468       HH_3  HH_3
4         EF5468       HH_3  HH_3
5         EF5468       HH_3  HH_3
6         EF5468       HH_3  HH_3
7         EF5468       HH_3  HH_3
8         EF5468       HH_3  HH_3
9         EF5468       HH_3  HH_3

编辑:

对于替换多个其他数据帧,请使用:

d = dict(zip(df['To_be_replaced'], df['new']))

然后^{}在另一个数据帧中:

df1['new'] = df1['To_be_replaced'].map(d)
df2['new'] = df2['To_be_replaced'].map(d)

我看到根据你的问题,EF5468被映射为HH_3HH_7。我猜这个映射应该是唯一的(将其作为数据帧导入并使用字典理解应该创建唯一的键值对)

您只需使用地图即可:

mapping_dict = {
'AB1321':                'HH_1', 
'CD5678':                'HH_2', 
'EF5468':                'HH_3',
'EF5438':                'HH_4',
'EF5368':                'HH_5',
'EF5068':                'HH_6',
'EF5458':                'HH_7',
'EF5168':                'HH_8'

df['new'] = df['old'].map(mapping_dict)

假设我正确地理解了您的问题(每个ID只出现一次),并且存在从旧ID到新ID的双射映射(即一对一和一对一)

相关问题 更多 >