我想從另一個 DataFrame 更改列名。
stackoverflow中有一些類似的問題,但我需要它的高級版本。
data1 = {
"ABC-123_afd": [420, 380, 390],
"LFK-402_ote": [50, 40, 45],
"BPM-299_qbm": [50, 40, 45],
}
data2 = {
"ID": ['ABC-123', 'LFK-402', 'BPM-299'],
"NewID": ['IQU', 'EUW', 'NMS']
}
data1_df=pd.DataFrame(data1)
# ABC-123_afd LFK-402_ote BPM-299_qbm
#0 420 50 50
#1 380 40 40
#2 390 45 45
data2_df=pd.DataFrame(data2)
# ID NewID
#0 ABC-123 IQU
#1 LFK-402 EUW
#2 BPM-299 NMS
我想使最終結果如下:
data_final_df
# IQU_afd EUW_ote NMS_qbm
#0 420 50 50
#1 380 40 40
#2 390 45 45
我嘗試了Renaming columns of dataframe with values from another dataframe中的代碼。
它運行沒有錯誤,但沒有任何變化。我認為 data 1 中的列名與 data2 值中的值不完全匹配。
如何從另一個 pandas DataFrame 更改列名的某些部分?
uj5u.com熱心網友回復:
我們可以創建一個從“ID”到“NewID”的映射,并使用它來修改列名:
mapping = dict(zip(data2['ID'], data2['NewID']))
data1_df.columns = [mapping[x] '_' y for x, y in data1_df.columns.str.split('_')]
print(data1_df)
要么
s = data1_df.columns.str.split('_')
data1_df.columns = s.str[0].map(mapping) '_' s.str[1]
或使用 DataFrame data2_df:
s = data1_df.columns.str.split('_')
data1_df.columns = s.str[0].map(data2_df.set_index('ID')['NewID']) '_' s.str[1]
輸出:
IQU_afd EUW_ote NMS_qbm
0 420 50 50
1 380 40 40
2 390 45 45
uj5u.com熱心網友回復:
一種選擇是使用replace:
mapping = dict(zip(data2['ID'], data2['NewID']))
s = pd.Series(data1_df.columns)
data1_df.columns = s.replace(regex = mapping)
data1_df
IQU_afd EUW_ote NMS_qbm
0 420 50 50
1 380 40 40
2 390 45 45
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/433562.html
