簡體   English   中英

替換 dataframe Python 的列中的多個值

[英]Replacing multiple values in a column of a dataframe Python

數以千計的值需要用更簡單的命名格式替換。 比如原始dataframe的命名為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])

使用Series.rank

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

GroupBy.ngroup

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

編輯:

要替換多個另一個 DataFrame,請使用:

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

然后Series.map在另一個 DataFrames 中:

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

我看到根據您的問題將EF5468映射為HH_3HH_7 我猜這個映射應該是唯一的(將它作為 DataFrame 導入並使用字典理解應該創建一個唯一的鍵值對)。

您可以為此簡單地使用 map:

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 的雙射(即一對一和到)映射。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM