根据另一个数据框的列条目过滤一个数据框的行的最佳方法是什么
What is the best way to filter rows of one dataframe based on column entries of another dataframe
我在 python 中有两个数据框,一个名为 DayList,包含以下列:OrderNr Powder Variant Quantity DueDate,另一个名为 Planning,包含以下列:Order Start End Day Powder Variant Task。
两个数据框都有多行特定组合,Powder 和 Variant 的列条目将是一个整数,我想将数据框 DayList 过滤为三类。
第一类是行的子集,其中 Powder 和 Variant 的确切组合也存在于数据框 Planning 的某处。
第二类是行的子集,其中 Powder 和 Variant 的确切组合不存在于数据框 Planning 中,但 Powder 的条目位于数据框 Planning 的 Powder 列中的某处。
第三类是行的子集,其中 Powder 的条目不在数据框 Planning 的 Powder 列中。
这三个类别不应重叠,而应共同构成数据框 DayList 的所有行。
我对数据框很陌生,所以我不确定如何定义它。我一直在尝试使用 isin() 但我似乎对第一类的正确语句感到困惑。
您可以编写一个函数来确定数据帧给定行的类别,然后使用 df.apply()
。为避免必须在函数中选择正确的列,您可以仅将其应用于简化的数据框,仅由 Powder
和 Variant
列组成:
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
我在 python 中有两个数据框,一个名为 DayList,包含以下列:OrderNr Powder Variant Quantity DueDate,另一个名为 Planning,包含以下列:Order Start End Day Powder Variant Task。 两个数据框都有多行特定组合,Powder 和 Variant 的列条目将是一个整数,我想将数据框 DayList 过滤为三类。
第一类是行的子集,其中 Powder 和 Variant 的确切组合也存在于数据框 Planning 的某处。 第二类是行的子集,其中 Powder 和 Variant 的确切组合不存在于数据框 Planning 中,但 Powder 的条目位于数据框 Planning 的 Powder 列中的某处。 第三类是行的子集,其中 Powder 的条目不在数据框 Planning 的 Powder 列中。
这三个类别不应重叠,而应共同构成数据框 DayList 的所有行。 我对数据框很陌生,所以我不确定如何定义它。我一直在尝试使用 isin() 但我似乎对第一类的正确语句感到困惑。
您可以编写一个函数来确定数据帧给定行的类别,然后使用 df.apply()
。为避免必须在函数中选择正确的列,您可以仅将其应用于简化的数据框,仅由 Powder
和 Variant
列组成:
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