2016-09-07 6 views
2

私の割り当てには、野球の給与データをパンダDataFrameにインポートする必要があります。
そこから、私の目的の1つは、年間のすべてのチームの給与を得ることです。pandas DataFrameとpandas.groupbyで給与を計算する

私は成功しましたが、次のタスクに移るために、私はパンダDataFrameが必要です。 sumofSalaries.dtypeint64を返します。

質問:
1.次のコードのデータをDataFrameに変換するにはどうすればよいですか?
2. 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はPythonでvery specific meaningを持っており、そのようなデータフレームには使用していません。あなたはGROUPBY後MultiIndexを取り除くためにreset_indexを使用したい

- あなたはMultiIndexを取り除きたい場合は、それがあります。詳細については、groupby docsmultiindexing docs上に読む

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() 
       )) 

関連する問題