我有一个df
with a user_id
and a category
。我想将其转换为真值表,以确定该用户是否至少有一个该类别的条目。但是,最终表还应包括“df_list”中出现的所有类别的列,这些列可能根本不会出现在df
.
现在我用一个创建真值表groupby
+ size
然后检查是否缺少任何列,然后手动将这些列设置为False
,但我想知道是否有办法在最初实现这一点groupby
step.
这是一个例子:
import pandas as pd
df = pd.DataFrame({'user_id': [1,1,1,2,2],
'category': ['A', 'B', 'D', 'A', 'F']})
df_list = pd.DataFrame({'category': ['A', 'B', 'C', 'D', 'E', 'F']})
df_truth = df.groupby(['user_id', 'category']).size().unstack(fill_value=0).astype(bool)
#category A B D F
#user_id
#1 True True True False
#2 True False False True
为了获得所需的输出,我需要执行以下操作:
missing_vals = df_list.category.unique()[~pd.Series(df_list.category.unique()).isin(df_truth.columns)]
for element in missing_vals:
df_truth.loc[:,element] = False
#category A B D F C E
#user_id
#1 True True True False False False
#2 True False False True False False