简体   繁体   English

根据 DataFrame2 中的值在 DataFrame1 中创建列

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

I have two Dataframes, and would like to create a new column in DataFrame 1 based on DataFrame 2 values.我有两个数据框,想在 DataFrame 1 中基于 DataFrame 2 值创建一个新列。

But I dont want to join the two dataframes per say and make one big dataframe, but rather use the second Dataframe simply as a look-up.但我不想按说加入两个数据帧并制作一个大的 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

One approach, is to use np.where :一种方法是使用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 Output

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

Given that df2 is sort of like a lookup based on Size, it would make sense if your Size column was its index:鉴于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")

You can then map the Sizes in df1 to their mean and compare each with the sold quantity:然后,您可以将df1中的尺寸 map 计算为其平均值,并将每个尺寸与售出数量进行比较:

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

and finally map the boolean values to the respective strings using np.where最后 map 使用np.where将 boolean 值赋给相应的字符串

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

df1: 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.

相关问题 如何根据在 dataframe2 中创建的列在 dataframe1 中创建列,该列是通过在 dataframe1 上使用 groupby() 导出的 - How create a column in dataframe1 based on a column created in dataframe2, which is derived by using groupby() on dataframe1 交叉连接/合并dataframe1以基于dataframe1中的列创建组合的dataframe2 - cross join/merge dataframe1 to create dataframe2 of combinations based on column in dataframe1 根据 dataframe2 中列表的值更新 dataframe1 中的单元格 - Update cell in dataframe1 based on value from list in dataframe2 Python pandas - 根据 dataframe1 中的另一列将 dataframe1 中的列与 dataframe2 中的列分开 - Python pandas - Divide a column in dataframe1 with a column in dataframe2 based on another column in dataframe1 在类似于sql like运算符的dataframe1列中找到dataframe2列,并使用pandas列出dataframe2的结果 - find dataframe2 colum in dataframe1 column similar to the sql like operator and list the result from dataframe2 using pandas 将 dataframe1 中的单元格值替换为 dataframe2 中先前确定的值 - Replace cell values in dataframe1 with previously determined values in dataframe2 Pandas,查找dataframe1列的哪些值在dataframe2列,在哪一行 - Pandas, search which values of column of dataframe1 are in column of dataframe2, and in which row 在 Python 中的特定行值之后,使用来自 dataframe2 和 select 中的所有行的值过滤 dataframe1 - Filter dataframe1 with values from dataframe2 and select all rows in dataframe 1 after a particular row value in Python 使用 dataframe2 (pandas, python) 中设置的条件从 dataframe1 中提取值_第 2 部分 - extracting values from dataframe1 using conditions set in dataframe2 (pandas, python) _ Part 2 从长格式 DataFrame2 中的匹配索引中减去 DataFrame1 中的列 - Subtract column in DataFrame1 from matching indices in long-form DataFrame2
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM