![](/img/trans.png)
[英]What is the best way to populate a column of a dataframe with conditional values based on corresponding rows in another column?
[英]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,僅由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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.