2016-03-03 42 views
0

在下面的表中,我試圖找到「案件數」爲SUM(「案件數」)的比例爲各佔通過列值除以單元格值列在不同的數據表

   Make | age | mileage | Test Result | Number of Cases 
0   ABARTH 0-3 <10,000   P    6 
1   ABARTH 0-3 <50,000   P    23 
2   ABARTH 0-3 <50,000   F    2 
3   ABARTH 0-3 <50,000   PRS    1 
4   ABARTH 0-3 <100,000   P    2 
5   ABARTH 0-3 <100,000   F    1 
6   ABARTH 3-5 <10,000   P    5 
7   ABARTH 3-5 <50,000   P    77 

所以我分組表如下:

Make     Number of Cases 

ABARTH       139 
AC        30 
AC (ELECTRIC)     33 
ACCESS       7 

使用循環和追加我所需要的值嘗試過,但沒有結果,因爲我敢肯定,我使用附加功能失常:

rate = pd.Series() 

for index, row in pass_rates.iterrows(): 
    rate.append(row['Number of Cases']/test_makes[test_makes['Make'] == row['Make']]) 

一個返回的對象是一個空系列

所以基本上我要找應該是這樣的

   Make | age | mileage | Test Result |  % 
0   ABARTH 0-3 <10,000   P    0.043 
1   ABARTH 0-3 <50,000   P    0.165 
2   ABARTH 0-3 <50,000   F    0.014 

回答

1

東西要得到你的結果的結果,我只是要添加一個病例總數列到基於groupby結果的現有DataFrame,然後在現有的DataFrame中進行分割。

total_cases = df.groupby('Make')['Number of Cases'].sum() 
df['Total Cases'] = df['Make'].map(total_cases) 
df['%'] = df['Number of Cases']/df['Total Cases'] 

此時,如果您不再希望保留它,則可以刪除「總案例」列。

+0

謝謝,但我收到此錯誤:TypeError:'DataFrame'對象不能在第2行調用 –

+0

您的total_cases是Series或DataFrame嗎?你可以打印'type(total_cases)'的結果來找出結果。當我運行代碼時,它是一個Series,可以通過'map'調用,但是你的錯誤表明你獲得了一個DataFrame。你在'groupby'中做了什麼不同的事情,會導致它返回一個DataFrame而不是一個Series? – root

+0

是的,你說得對,我現在正在工作 –

相關問題