2016-12-11 21 views
0

空のデータフレームを所定の形状で作成し、カテゴリの列を含む別のデータフレームから値を入力したい場合は、共有できます新しいデータフレーム内の列の元の値のサブセットのみを持つ場合、同じカテゴリのdtypepandasのカテゴリの列カテゴリを取得し、別の列にdtypeとして割り当てます

+0

データフレームが不均一です。あなたが記述したことはSeriesにとって可能であり、もちろんそれらのSeriesを別のDataFramesで使用することもできますが、あなたが望むものを例に説明する必要があると思います。 – ayhan

+1

基本的には、 'ser1 = pd.Series(pd.Categorical(list) '、abcabc'、categories = list( 'cba')、ordered = True) (pd.Categorical(list( 'bb')、categories = ser1.cat.categories)) '' ser2'は 'b'のみを含んでいますが、' c、b、a'のカテゴリがあります。 – ayhan

答えて

1

Series.cat.remove_unused_categories()メソッドを使用できると思います。ここで

は小さなデモです:

In [311]: df 
Out[311]: 
    channel day month    t1 title year 
631  AAA 06 01 1388967300000 title 1 2014 
632  CBR 06 01 1388973300000 title 2 2014 
633  CBR 06 01 1388974500000 title 3 2014 

In [312]: df.channel 
Out[312]: 
631 AAA 
632 CBR 
633 CBR 
Name: channel, dtype: category 
Categories (2, object): [AAA, CBR] 

In [313]: cp = df[df.channel == 'CBR'].copy() 

In [314]: cp.channel 
Out[314]: 
632 CBR 
633 CBR 
Name: channel, dtype: category 
Categories (2, object): [AAA, CBR] 

In [315]: cp.channel.cat.categories 
Out[315]: Index(['AAA', 'CBR'], dtype='object') 

In [316]: cp.channel.cat.remove_unused_categories(inplace=True) 

In [317]: cp.channel.cat.categories 
Out[317]: Index(['CBR'], dtype='object') 

In [318]: cp.channel 
Out[318]: 
632 CBR 
633 CBR 
Name: channel, dtype: category 
Categories (1, object): [CBR] 

UPDATE:

In [328]: new = pd.DataFrame({'x':[1,2]}) 

In [329]: new['ch'] = df.loc[df.channel == 'CBR', 'channel'].values 

In [330]: new 
Out[330]: 
    x ch 
0 1 CBR 
1 2 CBR 

In [331]: new.dtypes 
Out[331]: 
x  int64 
ch category 
dtype: object 

In [332]: new.ch.cat.categories 
Out[332]: Index(['AAA', 'CBR'], dtype='object') 
+0

ありがとうございます。 cp.channel.catを新たに作成した別のデータフレームのdtypeとして使用することはできますか?その列の1つが、デフォルトでオブジェクトの代わりに同じカテゴリでカテゴリになります。 –

+0

"私はあなたがSeries.cat.remove_unused_categories()メソッドを使うことができると思います。"いいえ、私の場合、私はちょうど逆のことをしたいと思います。 –

+0

@AlexanderReshytko、この場合、あなたは 'Series.cat.remove_unused_categories()'を呼び出す必要はありません - 私の答えのUPDATEセクションをチェックしてください – MaxU

関連する問題