【问题标题】:Pandas dataframe find first and last element given condition and calculate slope熊猫数据框在给定条件下查找第一个和最后一个元素并计算斜率
【发布时间】:2018-11-11 03:27:21
【问题描述】:

情况

我有一个 pandas 数据框,其中有一些关于产品生产的数据。该产品分三个阶段生产。阶段不是固定的,这意味着它们的周期(直到最后的时间)正在变化。在生产阶段,每个周期都会测量产品的温度。

请看下表:

问题

我需要计算每个产品每个阶段的每个周期的斜率。我还需要将它添加到名为“Slope”的新列中的数据框中。您可以看到以黄色突出显示的那个是我手动添加到 Excel 文件中的。真实的数据集包含数百个参数(不仅是温度),所以实际上我需要计算很多很多列的斜率,因此我尝试定义一个函数。

我的解决方案根本不起作用

这是我尝试过的代码,但它不起作用。我试图在给定阶段捕捉给定产品的第一行和最后一行。然后得到温度数据和这两行的差值。这样我就可以计算斜率。 到目前为止,这就是我所能想到的(我创建了另一个名为“Max_cylce_no”的列,它存储了每个阶段的最大循环量):

temp_at_start=-1

def slope(col_name):
    global temp_at_start
    start_cycle_no = 1
    if row["Cycle"]==1:
        temp_at_start =row["Temperature"]
        start_row = df.index(row)


    cycle_numbers = row["Max_cylce_no"] 
    last_cycle_row = cycle_numbers + start_row


    last_temp = df.loc[last_cycle_row, "Temperature"]

以及我想应用它的方式:

df.apply(slope("Temperature"), axis=1)

不幸的是,我马上收到一个 NameError 说:name 'row' is not defined。

您能否帮助我并告诉我如何解决这个问题的正确方向。这让我很难过。 :(

提前谢谢你!

【问题讨论】:

  • 如果我们想尝试我们的解决方案,提供图像作为数据源并没有真正的帮助。可以提供文本数据吗?

标签: python pandas dataframe


【解决方案1】:

我相信你需要 GroupBy.transform 用第一个减去最后一个值并除以长度:

f = lambda x: (x.iloc[-1] - x.iloc[0]) / len(x)
df['new'] = df.groupby(['Product_no','Phase_no'])['Temperature'].transform(f)

【讨论】:

  • 不错,我相信这是需要的输出OP。
  • 你太棒了!太感谢了!它就像魅力一样!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 2021-02-04
  • 1970-01-01
  • 2021-07-16
  • 2022-12-13
  • 1970-01-01
相关资源
最近更新 更多