在Pandas / Python中获取数据帧子集中第n个最大数字的函数

时间:2019-10-12 11:09:45

标签: python pandas dataframe

我有一个数据框df,其中包含三列,如下所示:

Date       ID   Number
2018-01-01  a   10
2018-01-08  a   7
2018-01-15  a   6
2018-01-22  a   9
2018-01-29  a   5
2018-02-05  a   6
2018-02-12  a   6
2018-02-19  a   5
2018-02-26  a   2
2018-01-15  b   7
2018-01-22  b   8
2018-01-29  b   6
2018-02-05  b   1
2018-02-12  b   1
2018-02-19  b   10
2018-02-26  b   10  

我想编写一个函数,其中对于每个ID,我需要计算第n个和第n-1个最大值,并使用这些值来计算一些公式。这是代码

def L_DF(s):
  temp1 = df.loc[df.ID.isin(s)]
  n =temp1['Number'].shape[0]
  y = int((n+1)*0.8)
  w = (n+1)*0.8-y
  if (n+1)*0.8>n:
    return (temp1['Number'].sort_values().iloc[n-1])
  else:
    return ((1-w)*temp1['Number'].sort_values().iloc[y-1] + w*temp1['Number'].sort_values().iloc[y])

我想在上面的数据框中使用此功能,并希望在下面的数据框中进行输出

ID   Value of Function
a    9
b    9

此代码给出了错误。有人可以帮忙解决问题吗

0 个答案:

没有答案