【发布时间】:2021-06-10 10:10:02
【问题描述】:
我有一个数据框:
Name Segment Axis 1 2 3 4 5
0 Amazon 1 slope NaN 100 120 127 140
1 Amazon 1 x 0.0 1.0 2.0 3.0 4.0
2 Amazon 1 y 0.0 0.4 0.8 1.2 1.6
3 Amazon 2 slope NaN 50 57 58 59
4 Amazon 2 x 0.0 2.0 4.0 6.0 8.0
5 Amazon 2 y 0.0 1.0 2.0 3.0 4.0
df2:
Name Segment Optimal Cost
Amazon 1 115
Amazon 2 60
Netflix 1 100
Netflix 2 110
我正在尝试将轴列中的斜率值与相应的最佳成本值进行比较,并提取斜率、x 和 y 值。
规则是:找到最后一个大于其对应最优成本的第一个斜率值
如果没有大于最优成本的值,则报告斜率为零的位置。
如果只有值大于最优成本,则报告最高 y 值
预期输出:
Name Segment slope x y
0 Amazon 1 120 2 0.8
1 Amazon 2 NaN 0 0
在@wwnde 的帮助下。当前代码是
s=df.set_index(['Name' , 'Segment','Axis']).stack().unstack('Axis')
s=s.dropna(subset=["slope"]).sort_values("slope").reset_index(level=2, drop=True)
df3=pd.merge(s, df2, on=['Name', 'Segment'], how='left')
df3[df3['slope']>df3['Optimal_Cost']].groupby(['Name',
'Segment']).first().reset_index()
但这仅在它发现最后一个第一个斜率值大于其相应的最佳成本时才返回值。
【问题讨论】:
-
那么你得到预期的输出了吗?
-
好的,谢谢! @AnuragDabas