簡體   English   中英

有效替換熊貓df中的值

[英]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.

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