Python 如何在比较两个数据帧的基础上创建新列';唯一id?
嗨,我有两个数据帧,它们有OrderID和stage编号。我想为August Dataframe创建一个新列,如果orderID匹配,它将返回七月的阶段号中的值。如果没有,请返回“不适用” 如何使用lambda和apply函数创建此列?(不要使用join…) 任何线索和建议将不胜感激! 谢谢 您可以与系列一起使用。注意:如果您有Python 如何在比较两个数据帧的基础上创建新列';唯一id?,python,pandas,dataframe,lambda,series,Python,Pandas,Dataframe,Lambda,Series,嗨,我有两个数据帧,它们有OrderID和stage编号。我想为August Dataframe创建一个新列,如果orderID匹配,它将返回七月的阶段号中的值。如果没有,请返回“不适用” 如何使用lambda和apply函数创建此列?(不要使用join…) 任何线索和建议将不胜感激! 谢谢 您可以与系列一起使用。注意:如果您有NaN值,您的序列将被迫float,因为NaN是一个浮点值。这在不增加效率的情况下是不可避免的 aug = pd.DataFrame({'ID': [111, 222,
NaN
值,您的序列将被迫float
,因为NaN
是一个浮点值。这在不增加效率的情况下是不可避免的
aug = pd.DataFrame({'ID': [111, 222, 333, 444, 555], 'Prior': np.nan})
jul = pd.DataFrame({'ID': [222, 333, 444, 555, 666, 777], 'Stage': [1, 2, 3, 4, 5, 6]})
aug['Prior'] = aug['ID'].map(jul.set_index('ID')['Stage'])
print(aug)
ID Prior
0 111 NaN
1 222 1.0
2 333 2.0
3 444 3.0
4 555 4.0
通过pd.Series.update
和对齐索引,可以实现更冗长的解决方案:
aug.set_index('ID', inplace=True)
aug['Prior'].update(jul.set_index('ID')['Stage'])
aug = aug.reset_index()
可以与系列一起使用。注意:如果您有NaN
值,您的序列将被迫float
,因为NaN
是一个浮点值。这在不增加效率的情况下是不可避免的
aug = pd.DataFrame({'ID': [111, 222, 333, 444, 555], 'Prior': np.nan})
jul = pd.DataFrame({'ID': [222, 333, 444, 555, 666, 777], 'Stage': [1, 2, 3, 4, 5, 6]})
aug['Prior'] = aug['ID'].map(jul.set_index('ID')['Stage'])
print(aug)
ID Prior
0 111 NaN
1 222 1.0
2 333 2.0
3 444 3.0
4 555 4.0
通过pd.Series.update
和对齐索引,可以实现更冗长的解决方案:
aug.set_index('ID', inplace=True)
aug['Prior'].update(jul.set_index('ID')['Stage'])
aug = aug.reset_index()
虽然我不喜欢将此作为答案发布,但如果您仍然对使用lambda感兴趣并申请,您可以按以下方式进行:
df=pd.DataFrame({'Order_id_July':[222,333,444,555,666,777],'stage':[1,2,3,4,5,6]})
df2=pd.DataFrame({'Order_id_August':[111,222,333,444,555]})
映射器函数(类似于查找)
输出:
Order_id_August prior_stage
111 NaN
222 1.0
333 2.0
444 3.0
555 4.0
如果以后你改变主意,想探索更好的方法来完成这项任务,试试下面的代码
df2.merge(df,left_on='Order_id_August',right_on='Order_id_July',how='left').drop('Order_id_July',axis=1)
Order_id_August prior_stage
111 NaN
222 1.0
333 2.0
444 3.0
555 4.0
虽然我不喜欢将此作为答案发布,但如果您仍然对使用lambda感兴趣并申请,您可以按以下方式进行:
df=pd.DataFrame({'Order_id_July':[222,333,444,555,666,777],'stage':[1,2,3,4,5,6]})
df2=pd.DataFrame({'Order_id_August':[111,222,333,444,555]})
映射器函数(类似于查找)
输出:
Order_id_August prior_stage
111 NaN
222 1.0
333 2.0
444 3.0
555 4.0
如果以后你改变主意,想探索更好的方法来完成这项任务,试试下面的代码
df2.merge(df,left_on='Order_id_August',right_on='Order_id_July',how='left').drop('Order_id_July',axis=1)
Order_id_August prior_stage
111 NaN
222 1.0
333 2.0
444 3.0
555 4.0
为什么要使用
lambda
和apply
?有更有效的方法可以做到这一点(使用合并
或映射
,或加入
,尽管您明确表示不希望这样……)。此外,请将您的数据框作为文本发布,以便我们可以剪切和粘贴它们,而不是自己重新创建它们。这是一项任务。在这种情况下,应用将是低效的。为什么不使用join?为什么要使用lambda
和apply
?有更有效的方法可以做到这一点(使用合并
或映射
,或加入
,尽管您明确表示不希望这样……)。此外,请将您的数据框作为文本发布,以便我们可以剪切和粘贴它们,而不是自己重新创建它们。这是一项任务。在这种情况下,应用将是低效的。为什么不使用join?非常感谢您的帮助。非常感谢您的帮助。