【问题标题】:Extract data based on various conditions根据各种条件提取数据
【发布时间】: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

标签: python pandas numpy


【解决方案1】:

让我们继续使用 @wwnde 解决方案,并对其进行一些更改:

s=df.set_index(['Name','Segment','Axis']).stack().unstack(2)
s=s.sort_values("slope").reset_index(level=2, drop=True) 
#In above code we don't have to drop nan
out=pd.merge(s, df2, on=['Name',  'Segment'], how='left')
cond=out['slope'].gt(out['Optimal Cost']) | out['slope'].isna()
#make changes in condition to include nan's
out=out[cond].groupby(['Name','Segment'],as_index=False).first().drop('Optimal Cost',1)

out的输出:

    Name    Segment     slope   x       y
0   Amazon  1           120.0   2.0     0.8
1   Amazon  2           NaN     0.0     0.0 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2017-02-12
    相关资源
    最近更新 更多