[英]Efficiently replace values in a pandas df
我試圖用pandas df
有意義的信息有效地替換某些值。 以下是我正在使用的df's
示例。
此df
是有意義信息的示例。 每個3個字母的代碼均等於實際位置。 例如ABC = Home
import pandas as pd
m = pd.DataFrame({
'Place' : ['Home','Away'],
'Code' : ['ABC','DEF']})
輸出:
Code Place
0 ABC Home
1 DEF Away
我想用位置信息替換值Column D
。 因此, Home
將取代ABC
。 此代碼后還有其他項目,但我可以輕松地刪除它們。
d = pd.DataFrame({
'C' : ['08:00:00','XX','08:10:00','XX','08:41:42','XX','08:50:00','XX', '09:00:00'],
'D' : ['ABC-Thu','','ABC-Thu','','DEF-Thu','','ABC-Thu','','DEF-Thu'],
'E' : ['Num:','','Num:','','Num:','','Num:','','Num:'],
'F' : ['1','','1','','1','','1','','1'],
'A' : ['A','','A','','A','','A','','A'],
'B' : ['Stop','','Res','','Stop','','Start','','Res']
})
目前,我正在手動執行此操作
#remove last 4 items
d['D'] = [x[:-4] for x in d['D']]
#replace with appropriate place
d['D'] = d['D'].replace(['ABC'], 'Home')
d['D'] = d['D'].replace(['DEF'], 'Away')
輸出:
A B C D E F
0 A Stop 08:00:00 Home Num: 1
1 XX
2 A Res 08:10:00 Home Num: 1
3 XX
4 A Stop 08:41:42 Away Num: 1
5 XX
6 A Start 08:50:00 Home Num: 1
7 XX
8 A Res 09:00:00 Away Num: 1
但是需要更換的不同地方的數量最多可以達到40-50。 代碼也可以隨每個數據集而變化。 因此, ABC
可能一天等於Home
第二天等於Pool
。 可以想象,每天更改40-50個不同的地方並不是很有效。
是否有效率更高的循環遍歷每個代碼並替換為場所信息?
我認為需要刪除最后4
個字符, map
通過Series
所創造set_index
,最后加fillna
用於替換非匹配值的原始值D
:
d['D'] = d['D'].str[:-4].map(m.set_index('Code')['Place']).fillna(d['D'])
print (d)
A B C D E F
0 A Stop 08:00:00 Home Num: 1
1 XX
2 A Res 08:10:00 Home Num: 1
3 XX
4 A Stop 08:41:42 Away Num: 1
5 XX
6 A Start 08:50:00 Home Num: 1
7 XX
8 A Res 09:00:00 Away Num: 1
詳細資料 :
print (d['D'].str[:-4])
0 ABC
1
2 ABC
3
4 DEF
5
6 ABC
7
8 DEF
Name: D, dtype: object
print (m.set_index('Code')['Place'])
Code
ABC Home
DEF Away
Name: Place, dtype: object
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.