簡體   English   中英

按數據框中的每一列值過濾行

[英]Filter row by each column value in data frame

我有一個包含一些汽車品牌和型號的數據框。 我想用第一列中的所有品牌來掩蓋它。 然而,它們會重復,因為有相當多的型號是由同一品牌生產的。 從那個掩碼,我想運行一些百分比計算。

然而,我需要對第一列中出現的每個品牌都這樣做。

這是我到目前為止所做的。

提取第一列的所有項目並將它們放入列表中,然后刪除所有重復項。 我找不到一種方法來獲得一個循環來獲得一個掩碼,然后為了我的統計目的而運行它。

這是 DataFrame 的樣子:

Brand,value,rating
Renault Captur,81.500.000,70
Renault Duster (B),84.000.000,70
Renault Kangoo,61.900.000,70
Renault Sandero (A),50.900.000,70
Renault Kwid,43.800.000,60
Renault  Logan (A),61.800.000,70
Renault  Stepway (A),67.700.000,70
Renault  Sandero (B),50.900.000,40
Renault Logan (B),61.800.000,50
Renault Stepway (B),67.700.000,50
Renault Duster (A),67.800.000,0
Chevrolet Onix HB,69.300.000,100
Chevrolet Onix Plus,70.700.000,100
Chevrolet New Aveo (A),37.000.000,70

我需要過濾所有雷諾、雪佛蘭等等。 我知道這可以手動使用每個品牌並創建一個面具。 我想知道是否有辦法使用“品牌”列中存在的每個品牌來循環/自動化此過濾器。

首先,您需要將“品牌名稱”和“型號名稱”分成單獨的列。 然后您可以對“品牌名稱”進行groupby以掩蓋“型號名稱”。

cars = pd.read_csv('cars.csv')
#Split Brand and Model Name
cars['Brand Name'] = [car.split(' ', 1)[0] for car in cars['Brand']]
cars['Model Name'] = [car.split(' ', 1)[1].strip() for car in cars['Brand']]
#Convert 'value' to integer
cars['value'] = [int(car[:-4].replace('.','')) for car in cars['value']]

轉換后的數據如下所示。

                     Brand  value  rating Brand Name    Model Name
0           Renault Captur  81500      70    Renault        Captur
1       Renault Duster (B)  84000      70    Renault    Duster (B)
2           Renault Kangoo  61900      70    Renault        Kangoo
3      Renault Sandero (A)  50900      70    Renault   Sandero (A)
4             Renault Kwid  43800      60    Renault          Kwid
5       Renault  Logan (A)  61800      70    Renault     Logan (A)
6     Renault  Stepway (A)  67700      70    Renault   Stepway (A)
7     Renault  Sandero (B)  50900      40    Renault   Sandero (B)
8        Renault Logan (B)  61800      50    Renault     Logan (B)
9      Renault Stepway (B)  67700      50    Renault   Stepway (B)
10      Renault Duster (A)  67800       0    Renault    Duster (A)
11       Chevrolet Onix HB  69300     100  Chevrolet       Onix HB
12     Chevrolet Onix Plus  70700     100  Chevrolet     Onix Plus
13  Chevrolet New Aveo (A)  37000      70  Chevrolet  New Aveo (A)

現在,您可以分組並使用您需要的任何統計數據。

#Use groupby to get the required statistic
cars.groupby('Brand Name')['value'].mean() #Average 'value' of each brand
cars.groupby('Brand Name')['rating'].mean() #Average 'rating' of each brand

暫無
暫無

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

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