ローガンWLV:
私はパンダcatagoricalのデータフレームでの始めています。
のは、私が持っているとしましょう(1) :
A B C
-------------
3 Z M
O X T
4 A B
:私はそのようなデータフレームフィルタリングdf[ df['B'] != "X"]
だから私は結果としてなるだろう(2) :
A B C
-------------
3 Z M
4 A B
で(1) df['B'].cat.categories #would equal to ['Z', 'X', 'A']
(2) df['B'].cat.categories #still equal to ['Z', 'X', 'A']
フィルタリングこの種の操作の後にすべての列のDFカテゴリを更新する方法?
ALollz:
remove_unused_categories
フィルタリング後の列から。
piRSquaredが指摘するように、あなたは簡潔にすべての列与えられ、これを行うことができますカテゴリDTYPEです。
df = df.query('B != "X"').apply(lambda s: s.cat.remove_unused_categories())
これは、フィルタリング後の列をループします。
print(df)
# A B C
#0 3 Z M
#1 O X T
#2 4 A B
df['B'].cat.categories
#Index(['A', 'X', 'Z'], dtype='object')
df = df[ df['B'] != 'X']
# Update all category columns
for col in df.dtypes.loc[lambda x: x == 'category'].index:
df[col] = df[col].cat.remove_unused_categories()
df['B'].cat.categories
#Index(['A', 'Z'], dtype='object')
df['C'].cat.categories
#Index(['B', 'M'], dtype='object')