2016-05-17 4 views
1

私はカスタムソートされたDataFrameを作成したいと思います。これを行うには、pandas.Categorical()を使用しましたが、私はグループのの値を返します。pandasでは、グループ化でカテゴリ型の列を使用できないのはなぜですか?

# import the pandas module 
import pandas as pd 

# Create an example dataframe 
raw_data = {'Date': ['2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13','2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13'], 
     'Portfolio': ['A', 'A', 'A', 'A', 'A', 'A', 'B', 'B','B', 'B', 'B', 'C', 'C', 'C', 'C', 'C', 'C'], 
     'Duration': [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3], 
     'Yield': [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1],} 

df = pd.DataFrame(raw_data, columns = ['Date', 'Portfolio', 'Duration', 'Yield']) 

df['Portfolio'] = pd.Categorical(df['Portfolio'],['C', 'B', 'A']) 
df=df.sort_values('Portfolio') 

dfs = df.groupby(['Date','Portfolio'], as_index =False).sum() 

print(dfs) 

         Date Portfolio Duration Yield 
Date  Portfolio    
13/05/2016 C   NaN  NaN   NaN  NaN 
      B   NaN  NaN   NaN  NaN 
      A   NaN  NaN   NaN  NaN 

なぜこれを克服できますか?

また、SettingWithCopyWarningは、Categoricalの方がより良いイディオムですか?

+2

これは、他の「日付」列との組み合わせに関連するバグ/(偽の作業を行い=唯一のポートフォリオによってグループ化またはas_indexを使用していないとの両方)as_index =は 'false'使用しているようです。 https://github.com/pydata/pandas/issuesで問題を報告しますか? – joris

答えて

1

as_index=Falseは何かを台無しにしています。私は実行する場合:

dfs = df.groupby(['Date','Portfolio']).sum() 

は私が取得:

     Duration Yield 
Date  Portfolio     
2016-05-13 C    18 6.0 
      B    10 10.0 
      A     6 1.8 

これは、なぜ私は知りません。これはバグかもしれません。

インデックスなしの結果を実際に表示したい場合は、'Date''Portfolio'の列には'reset_index()'を使用してください。

dfs = df.groupby(['Date','Portfolio']).sum().reset_index() 

     Date Portfolio Duration Yield 
0 2016-05-13   C  18 6.0 
1 2016-05-13   B  10 10.0 
2 2016-05-13   A   6 1.8 
関連する問題