【问题标题】:Filling dataframe with True values based on criteria根据标准用真值填充数据框
【发布时间】:2019-07-08 18:54:32
【问题描述】:

我创建了一个数据框,其中列作为不同的文档,行作为这些文档的特征,如下所示:

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

假设:

t1_list = ['date', 'review_score']

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

【问题讨论】:

  • 我明白你在问什么。但你需要更具体。请提供minimal reproducible example
  • 无论其价值如何,许多(大多数?)分析的结构都是这样的,即您的观察单位(文档)将位于行中,并且该单元的属性(文档特征)将在列中。
  • @BrendanCox 这是要求完成的方式
  • 您的文档存储在任意数量的变量中?如果您将它们存储在字典中,您的生活可能会更轻松:d = {'t1: ['date', 'review_score'], 't2': ...}

标签: python pandas dataframe


【解决方案1】:

假设你有一个这样的字典

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)

【讨论】:

    【解决方案2】:

    假设您的数据框是 df,其中列作为文档名称,索引作为特征。将您的文档放在字典下以便更好地访问它们。假设这个dictdocDict,键是文档名称,即t1、t2 等,内容是文档内容。那么下面的代码应该可以工作。如果您不想使用dict,那么您将不得不以其他方式遍历每个文档,但其余部分相同。

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

    现在您的数据框 df 将获得所需的结果。

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 2020-11-05
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多