![](/img/trans.png)
[英]Replacing the corresponding column values in Python Pandas dataframe
[英]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)
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_3
和HH_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.