2016-09-07 7 views
2

제 과제물로 야구 급여 데이터를 팬더 DataFrame으로 가져와야합니다.
내 목표 중 하나는 일년에 모든 팀의 급여를받는 것입니다.pandas DataFrame 및 pandas.groupby로 급여 계산

그러나 나는 다음 작업으로 넘어 가기 위해 성공적이었습니다. 팬더가 필요합니다. DataFrame. sumofSalaries.dtypeint64입니다.

질문 :
1. 다음 코드의 데이터를 DataFrame으로 변환하려면 어떻게해야합니까?
sumofSalaries에서 인덱스를 삭제하려면 어떻게해야합니까?

코드 :

import pandas as pd 
salariesData = pd.read_csv('Salaries.csv') 

#sum salaries by year and team 
sumOfSalaries = salariesData.groupby(by=['yearID','teamID'])['salary'].sum() 

del sumOfSalaries.index.names #line giving me errors 

#create DataFrame from grouped data 
df = pd.DataFrame(sumOfSalaries, columns = ['yearID', 'teamID', 'salary']) 
df 

_____________________________________________________________________________ 

sumofSalaries: 
yearID teamID 
1985 ATL  14807000 
     BAL  11560712 
     BOS  10897560 
     CAL  14427894 
     CHA   9846178 

...and so on 
_____________________________________________________________________________ 

    df: 

      yearID teamID salary 
yearID teamID   
1985 ATL NaN NaN 14807000 
     BAL NaN NaN 11560712 
     BOS NaN NaN 10897560 
     CAL NaN NaN 14427894 
+0

가 왜 인덱스를 삭제하려고? 다른 말로하면, 그 중간 단계에서 무엇을 얻으려고합니까? – James

+0

'Salaries.csv' 스 니펫을 추가 할 수 있습니까? – ramesh

답변

0

내가 만, 출력은 as_index=Falsegroupby에 매개 변수를 추가 할 필요가 있다고 생각 DataFrameMultiIndex없이 :

sumOfSalaries = salariesData.groupby(by=['yearID','teamID'], as_index=False)['salary'].sum() 

샘플 :

또한
import pandas as pd 

salariesData = pd.DataFrame({ 
'yearID': {0: 1985, 1: 1985, 2: 1985, 3: 1985, 4: 1985, 5: 1986, 6: 1986, 7: 1986, 8: 1987, 9: 1987}, 
'teamID': {0: 'ATL', 1: 'ATL', 2: 'ATL', 3: 'CAL', 4: 'CAL', 5: 'CAL', 6: 'CAL', 7: 'BOS', 8: 'BOS', 9: 'BOS'}, 
'salary': {0: 10, 1: 20, 2: 30, 3: 40, 4: 50, 5: 10, 6: 20, 7: 30, 8: 40, 9: 50} 
}, 
columns = ['yearID','teamID','salary'] 
) 

print (salariesData) 
    yearID teamID salary 
0 1985 ATL  10 
1 1985 ATL  20 
2 1985 ATL  30 
3 1985 CAL  40 
4 1985 CAL  50 
5 1986 CAL  10 
6 1986 CAL  20 
7 1986 BOS  30 
8 1987 BOS  40 
9 1987 BOS  50 

sumOfSalaries = salariesData.groupby(by=['yearID','teamID'], as_index=False)['salary'].sum() 

print (sumOfSalaries) 
    yearID teamID salary 
0 1985 ATL  60 
1 1985 CAL  90 
2 1986 BOS  30 
3 1986 CAL  30 
4 1987 BOS  90 

(None, None)에 할당 사용, 인덱스 이름을 제거해야하는 경우지만, 위의 솔루션을 사용하는 경우 필요하지 않습니다.

sumOfSalaries.index.names = (None, None) 

샘플 :

sumOfSalaries = salariesData.groupby(by=['yearID','teamID'])['salary'].sum() 
sumOfSalaries.index.names = (None, None) 

print (sumOfSalaries) 

1985 ATL 60 
     CAL 90 
1986 BOS 30 
     CAL 30 
1987 BOS 90 
Name: salary, dtype: int64 
+0

감사합니다 !!!! = D – KatieRose1029

1

del 파이썬에서 very specific meaning을 가지고 있으며, 그런 dataframe에 아무 소용이 없습니다.

reset_index을 사용하여 groupby 이후에 MultiIndex을 제거하려는 경우 - MultiIndex을 제거하려는 경우입니다.

import pandas as pd 
salariesData = pd.read_csv('Salaries.csv') 

#sum salaries by year and team 
sumOfSalaries = (pd.DataFrame(
       salariesData.groupby(by=['yearID','teamID'])['salary'].sum() 
       .reset_index() 
       )) 

groupby docs 및 자세한 내용은 multiindexing docs 읽기 최대.

관련 문제