如何在pandas dataframe中的当前行和无界前一行之间应用类似于行的窗口?

2024-06-16 11:58:57 发布

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

我有下面的示例数据帧为:-即不同年份和不同季度的id、名称和值不同

id name year quater value 
1  bn   2017 2
1  bn   2017 3     4.5
1  bn   2017 4
1  bn   2018 1
1  bn   2018 2
1  bn   2018 3
2  an   2017 2     2.3   
2  an   2017 3     3.3
2  an   2017 4     4.5
2  an   2018 1   
2  an   2018 2
2  an   2018 3

对于给定的id和姓名:在

  1. 如果当前值为null且没有上一个值或所有先前值为null,则状态为2
  2. 如果当前值为空且任何高于该四分之一的值 年份不为空,则状态为0
  3. 如果当前值不为空且所有高于该四分之一的值 且年份为空或上一年不存在,则状态为1
  4. 如果当前值不为空,并且任何高于该四分之一的值 年份不为空,则状态为0

    1-新 0-不是新的 2-不确定

结果应为:

^{pr2}$

这将有助于识别id和名称是new(1)/existing(0)/notsure(2)


Tags: 数据name名称anid示例value状态
1条回答
网友
1楼 · 发布于 2024-06-16 11:58:57
df = df.fillna(0)
df.loc[:, 'cum_value'] = df.groupby(['id', 'name']).value.cumsum()

def get_status(value, cum_value):
    if value!=0 and value == cum_value:
        return 1
    elif value==0 and cum_value==0:
        return 2
    else:
        return 0

df.loc[:, 'status'] = df.apply(lambda row: get_status(row['value'], row['cum_value'] ), axis=1)

我将NaN的值改为0以使事情更简单。如果您想将它们改回NaN,您可以很容易地这样做,例如:

^{pr2}$

相关问题 更多 >