我创建了一个数据框,其中列作为不同的文档,行作为这些文档的功能,如下所示:
还有更多的文档和70多个功能。我想将NaN值替换为True或保留为NaN,具体取决于文档是否包含要素(行)。
假设:
t1_list = ['date', 'review_score']
然后,数据帧中t1下的前两行将显示为True和course_id,而其余行将通过针对当前行检查t1_list
的元素而保持为NaN。
每个“文档”都有一个对应的列表,类似于上面列出的包含该文档功能的列表。我实质上只是在创建一个具有True / NaN值的大型矩阵,以轻松查看哪些文档包含或不包含相同功能。因此,如果当前行名称包含在相应的列表中,则将NaN替换为True。
答案 0 :(得分:2)
假设您有这样的字典
features_per_doc = {"t1": ['date', 'review_score'], "t2": ['review_score'],\
"t3":['review_score', 'date', 'review_score']}
然后您可以做:
df.apply(lambda column: column.index.isin(features_per_doc[column.name]))
这将返回:
t1 t2 t3
date True False True
review_score True True True
course_id False False False
如果您想摆脱错误,那就可以做
df.replace(False, pd.np.nan)
答案 1 :(得分:0)
假设您的数据框为df
,其中列作为文档名称,索引作为特征。将文档放在词典下可以更好地访问它们。假设此dict
是docDict
,其键为文档名称,即t1,t2等,内容为文档内容。然后下面的代码应该工作。如果您不想使用dict
,则必须以其他方式遍历每个文档,但其余部分将保持不变。
for doc in df.columns:
for feature in docDict[doc]:
df[feature][doc] = True
现在您的数据框df
将具有必需的结果。