为了账号安全,请及时绑定邮箱和手机立即绑定

聚合和滚动特定窗口后如何应用自定义函数(使用应用方法)

聚合和滚动特定窗口后如何应用自定义函数(使用应用方法)

动漫人物 2022-01-18 21:38:34
我有这样的 DateFrame: period          payor       variance_charges6/1/2018    LIABILITY PLANS 4631.66677/1/2018    LIABILITY PLANS -1125.83338/1/2018    LIABILITY PLANS -12688.33339/1/2018    LIABILITY PLANS -1657.510/1/2018   LIABILITY PLANS -14806.666711/1/2018   LIABILITY PLANS 13910.833312/1/2018   LIABILITY PLANS 12154.16676/1/2018    MEDICAID CMO    -39174.58177/1/2018    MEDICAID CMO    59504.57678/1/2018    MEDICAID CMO    13967.48839/1/2018    MEDICAID CMO    -158103.4910/1/2018   MEDICAID CMO    -71191.966711/1/2018   MEDICAID CMO    -405366.121712/1/2018   MEDICAID CMO    -21637.05在对付款人(列)进行汇总后,我想检查每个窗口(每个窗口上 3 行)有多少负值:period      payor     variance_charges  count_neg6/1/2018    LIABILITY PLANS 4631.6667   07/1/2018    LIABILITY PLANS -1125.8333  18/1/2018    LIABILITY PLANS -12688.3333 29/1/2018    LIABILITY PLANS -1657.5     310/1/2018   LIABILITY PLANS -14806.6667 311/1/2018   LIABILITY PLANS 13910.8333  212/1/2018   LIABILITY PLANS 12154.1667  16/1/2018    MEDICAID CMO    -39174.5817 17/1/2018    MEDICAID CMO    59504.5767  18/1/2018    MEDICAID CMO    13967.4883  19/1/2018    MEDICAID CMO    -158103.49  110/1/2018   MEDICAID CMO    -71191.9667 211/1/2018   MEDICAID CMO    -405366.12  312/1/2018   MEDICAID CMO    -21637.05   3我试过下面的代码df.sort_values(by = 'period', ascending=True)df['count_neg'] = df.groupby(['payor'])['variance_charges'].transform(lambda x: x.rolling(6, min_periods=1).apply(lambda n: sum(n < 0 for n in x), raw = False))使用上面的代码,我可以检查整个聚合有多少负值,而不考虑窗口。我得到的错误结果如下所示:period      payor    variance_charges   count_neg6/1/2018    LIABILITY PLANS 4631.6667   47/1/2018    LIABILITY PLANS -1125.8333  48/1/2018    LIABILITY PLANS -12688.3333 49/1/2018    LIABILITY PLANS -1657.5     410/1/2018   LIABILITY PLANS -14806.6667 411/1/2018   LIABILITY PLANS 13910.8333  412/1/2018   LIABILITY PLANS 12154.1667  46/1/2018    MEDICAID CMO    -39174.5817 57/1/2018    MEDICAID CMO    59504.5767  58/1/2018    MEDICAID CMO    13967.4883  5请帮助解决这个问题。
查看完整描述

1 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

您可以通过 remove 简化您的功能for n in x:


f = lambda x: x.rolling(3, min_periods=1).apply(lambda n: sum(n < 0), raw = False)

df['count_neg1'] = df.groupby(['payor'])['variance_charges'].transform(f).astype(int)


print (df)

       period            payor  variance_charges  count_neg  count_neg1

0    6/1/2018  LIABILITY PLANS         4631.6667          0           0

1    7/1/2018  LIABILITY PLANS        -1125.8333          1           1

2    8/1/2018  LIABILITY PLANS       -12688.3333          2           2

3    9/1/2018  LIABILITY PLANS        -1657.5000          3           3

4   10/1/2018  LIABILITY PLANS       -14806.6667          3           3

5   11/1/2018  LIABILITY PLANS        13910.8333          2           2

6   12/1/2018  LIABILITY PLANS        12154.1667          1           1

7    6/1/2018     MEDICAID CMO       -39174.5817          1           1

8    7/1/2018     MEDICAID CMO        59504.5767          1           1

9    8/1/2018     MEDICAID CMO        13967.4883          1           1

10   9/1/2018     MEDICAID CMO      -158103.4900          1           1

11  10/1/2018     MEDICAID CMO       -71191.9667          2           2

12  11/1/2018     MEDICAID CMO      -405366.1200          3           3

13  12/1/2018     MEDICAID CMO       -21637.0500          3           3


查看完整回答
反对 回复 2022-01-18
  • 1 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信