根据条件用True值填充数据框

时间:2019-07-08 18:54:32

标签: python pandas dataframe

我创建了一个数据框,其中列作为不同的文档,行作为这些文档的功能,如下所示:
enter image description here

还有更多的文档和70多个功能。我想将NaN值替换为True或保留为NaN,具体取决于文档是否包含要素(行)。

假设:

t1_list = ['date', 'review_score']

然后,数据帧中t1下的前两行将显示为True和course_id,而其余行将通过针对当前行检查t1_list的元素而保持为NaN。
每个“文档”都有一个对应的列表,类似于上面列出的包含该文档功能的列表。我实质上只是在创建一个具有True / NaN值的大型矩阵,以轻松查看哪些文档包含或不包含相同功能。因此,如果当前行名称包含在相应的列表中,则将NaN替换为True。

2 个答案:

答案 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,其中列作为文档名称,索引作为特征。将文档放在词典下可以更好地访问它们。假设此dictdocDict,其键为文档名称,即t1,t2等,内容为文档内容。然后下面的代码应该工作。如果您不想使用dict,则必须以其他方式遍历每个文档,但其余部分将保持不变。

for doc in df.columns:
    for feature in docDict[doc]:
        df[feature][doc] = True

现在您的数据框df将具有必需的结果。