簡體   English   中英

根據另一個 dataframe 的列條目過濾一個 dataframe 的行的最佳方法是什么

[英]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 的列條目將是 integer,我想將 dataframe DayList 過濾為三個類別。

第一類是在 dataframe 規划中的某處也存在 Powder 和 Variant 的確切組合的行子集。 第二類是 dataframe 規划中不存在 Powder 和 Variant 的確切組合的行子集,但 Powder 的條目位於 dataframe 規划中的 Powder 列中的某處。 第三類是粉末條目不在 dataframe 規划中的粉末列中的行子集。

這三個類別不應重疊,而是由 dataframe DayList 的所有行組成。 我對數據框很陌生,所以我不確定如何定義它。 我一直在嘗試使用 isin() 但我似乎對第一類的正確陳述感到困惑。

您可以編寫 function 來確定 dataframe 的給定行的類別,然后使用df.apply() 為避免在 function 中選擇正確的列,您可以僅將其應用於簡化的 dataframe,僅由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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM