0

我在 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 列中的某个位置。第三类是 Powder 条目不在数据框 Planning 中的 Powder 列中的行子集。

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

4

1 回答 1

0

您可以编写一个函数来确定数据帧给定行的类别,然后使用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
于 2021-05-20T11:46:12.040 回答