不平等

2024-05-29 02:46:59 发布

您现在位置:Python中文网/ 问答频道 /正文

df1:

 Con1   Con2    Con3
 p      s       100
 q      t       200
 p      t       300
 q      s       400

df2:

Ton1    Ton2    Ton3
p       s       150
p       t       110
p       s       108
q       t       409
q       s       410
q       t       406

输出应为:

Con1    Con2    Con3    Ton1    Ton2    Ton3
p       s       100     p       s       108
q       t       200     Nan     Nan     Nan
p       t       300     Nan     Nan     Nan
q       s       400     Nan     Nan     Nan

合并应基于逻辑Ton3应比Con3高6-10%

逻辑:(Ton3=>;(6%*Con3)+Con3)&;(Ton3=<;(10%*Con3)+Con3)

pd.merge(df1,df2,left_on=['Con1','Con2']+logic, right_on=['Ton1','Ton2']+logic, how='left')

Tags: gton逻辑nanleftampdf1df2
1条回答
网友
1楼 · 发布于 2024-05-29 02:46:59

数据帧生成

df1 = pd.DataFrame({'Con1':['p','q','p','q'], 'Con2':['s','t','t','s'], 'Con3':[100,200,300,400]})
df2 = pd.DataFrame({'Ton1':['p','p','p','q','q','q'], 'Ton2':['s','t','s','t','s','t'], 'Ton3':[150,110,108,409,410,406]})

合并数据帧并应用给定条件:

df = pd.merge(df1,df2,how='left',left_on=['Con1','Con2'], right_on=['Ton1','Ton2'])
df = df[(df['Ton3']>=((0.06*df['Con3']) +df['Con3'])) & (df['Ton3']<=((0.1*df['Con3']) +df['Con3']))]
print(df)

我认为这应该是输出的最终格式。 还请注意,对于df1中的Con1Con2的特定对,df2中可能存在多对Ton1Ton2

如果还必须使用NaN获取行,请在运行上面的代码块之后运行此代码块

df = pd.merge(df1,df,how='left',left_on=['Con1','Con2','Con3'], right_on=['Con1','Con2','Con3'])
print(df)

相关问题 更多 >

    热门问题