簡體   English   中英

根據 DataFrame2 中的值在 DataFrame1 中創建列

[英]Create column in DataFrame1 based on values from DataFrame2

我有兩個數據框,想在 DataFrame 1 中基於 DataFrame 2 值創建一個新列。

但我不想按說加入兩個數據幀並制作一個大的 dataframe,而是將第二個 Dataframe 用作查找。

#Main Dataframe:
df1 = pd.DataFrame({'Size':["Big", "Medium", "Small"], 'Sold_Quantity':[10, 6, 40]})

#Lookup Dataframe
df2 = pd.DataFrame({'Size':["Big", "Medium", "Small"], 'Sold_Quantiy_Score_Mean':[10, 20, 30]})

#Create column in Dataframe 1 based on lookup dataframe values:
df1['New_Column'] = when df1['Size'] = df2['Size'] and df1['Sold_Quantity'] < df2['Sold_Quantiy_Score_Mean'] then 'Below Average Sales' else 'Above Average Sales!' end

一種方法是使用np.where

import pandas as pd
import numpy as np

df1 = pd.DataFrame({'Size': ["Big", "Medium", "Small"], 'Sold_Quantity': [10, 6, 40]})
df2 = pd.DataFrame({'Size': ["Big", "Medium", "Small"], 'Sold_Quantiy_Score_Mean': [10, 20, 30]})

condition = (df1['Size'] == df2['Size']) & (df1['Sold_Quantity'] < df2['Sold_Quantiy_Score_Mean'])

df1['New_Column'] = np.where(condition, 'Below Average Sales', 'Above Average Sales!')

print(df1)

Output

     Size  Sold_Quantity            New_Column
0     Big             10  Above Average Sales!
1  Medium              6   Below Average Sales
2   Small             40  Above Average Sales!

鑒於df2有點像基於大小的查找,如果您的大小列是它的索引,那將是有意義的:

import pandas as pd
import numpy as np

df1 = pd.DataFrame({'Size': ["Big", "Medium", "Small"], 'Sold_Quantity': [10, 6, 40]})
df2 = pd.DataFrame({'Size': ["Big", "Medium", "Small"], 'Sold_Quantiy_Score_Mean': [10, 20, 30]})

lookup = df2.set_index("Size")

然后,您可以將df1中的尺寸 map 計算為其平均值,並將每個尺寸與售出數量進行比較:

is_below_mean = df1["Sold_Quantity"] < df1["Size"].map(lookup["Sold_Quantiy_Score_Mean"])

最后 map 使用np.where將 boolean 值賦給相應的字符串

df1["New_Column"] = np.where(is_below_mean, 'Below Average Sales', 'Above Average Sales!')

df1:

     Size  Sold_Quantity            New_Column
0     Big             10  Above Average Sales!
1  Medium              6   Below Average Sales
2   Small             40  Above Average Sales!

暫無
暫無

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

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