获取pandas分类列类别并将其作为dtype分配给另一列

时间:2016-12-11 22:59:44

标签: pandas

我创建了一个具有给定形状的空数据框,并希望用包含分类列的另一个给定数据框中的某些值填充它,是否可以为新数据框中的列共享相同的分类dtype它只有一个原始的唯一值的子集?

1 个答案:

答案 0 :(得分: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]

<强>更新

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