【问题标题】:What is the best way to filter rows of one dataframe based on column entries of another dataframe根据另一个数据框的列条目过滤一个数据框的行的最佳方法是什么
【发布时间】:2021-05-20 09:34:41
【问题描述】:

我在 python 中有两个数据框,一个名为 DayList,包含以下列:OrderNr Powder Variant Quantity DueDate,另一个名为 Planning,包含以下列:Order Start End Day Powder Variant Task。 两个数据框都有多行特定组合,Powder 和 Variant 的列条目将是一个整数,我想将数据框 DayList 过滤为三个类别。

第一个类别是 Powder 和 Variant 的精确组合也存在于数据框 Planning 中某处的行子集。 第二类是数据框 Planning 中不存在 Powder 和 Variant 的确切组合的行的子集,但 Powder 的条目位于数据框 Planning 中的 Powder 列中的某个位置。 第三类是数据框 Planning 中 Powder 条目不在 Powder 列中的行子集。

这三个类别不应重叠,而是由数据框 DayList 的所有行组成。 我对数据框很陌生,所以我不确定如何定义它。我一直在尝试使用 isin(),但我似乎对第一类的正确语句感到困惑。

【问题讨论】:

    标签: python pandas dataframe multiple-columns isin


    【解决方案1】:

    您可以编写一个函数来确定数据框给定行的类别,然后使用df.apply()。为避免在函数中选择正确的列,您可以将其仅应用于缩减的数据帧,仅包含 PowderVariant 列:

    import pandas as pd
    
    # example dataframes with just the relevant columns, but 
    # the code below also works for dataframes containing additional columns
    DayList = pd.DataFrame({'Powder': [1, 2, 3, 4, 5, 6],
                            'Variant': [1, 2, 1, 2, 1, 2]})
    Planning = pd.DataFrame({'Powder': [3, 4, 5, 6],
                             'Variant': [1, 2, 2, 1]})
    
    def determine_category(row):
        powder, variant = row.values
        if [powder, variant] in Planning[['Powder', 'Variant']].values.tolist():
            return 1
        if powder in Planning['Powder'].values:
            return 2
        return 3
    
    DayList['Category'] = DayList[['Powder', 'Variant']].apply(
                          determine_category, axis=1)
    DayList
    
        Powder  Variant  Category
    0   1       1        3
    1   2       2        3
    2   3       1        1
    3   4       2        1
    4   5       1        2
    5   6       2        2
    

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多