そのカテゴリを更新する列の値によってパンダcatagoricalデータフレームをフィルタリング

ローガン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')

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=365217&siteId=1