猿问

如何从 Pandas DataFrame 中的特定行开始检测过去 2 个月的变化

假设我们有一个这样的数据框:


Id  Policy_id   Start_Date  End_Date    Fee1    Fee2    Last_dup

0   b123        2019/02/24  2019/03/23  0       23      0

1   b123        2019/03/24  2019/04/23  0       23      0

2   b123        2019/04/24  2019/05/23  10      23      1

3   c123        2018/09/01  2019/09/30  10      0       0

4   c123        2018/10/01  2019/10/31  10      0       1

5   d123        2017/02/24  2019/03/23  0       0       0

6   d123        2017/03/24  2019/04/23  0       0       1

该列Last_dup是应用.duplicated( answer )的结果。


在这种情况下,End_Date和的减法结果Start_Date始终为30天以进行简化。我的目标是检测的变化Fee1,并Fee2在过去的2个月为每个Policy_id。


所以首先,我想找到最后一个元素,Policy_id然后从最后一个元素开始,比较几个月之间的费用并检测变化。


预期结果:


Id  Policy_id   Start_Date  End_Date    Fee1    Fee2    Last_dup    Changed

0   b123        2019/02/24  2019/03/23  0       23      0           0

1   b123        2019/03/24  2019/04/23  0       23      0           0

2   b123        2019/04/24  2019/05/23  10      23      1           1

3   c123        2018/09/01  2019/09/30  10      0       0           0

4   c123        2018/10/01  2019/10/31  10      0       1           0

5   d123        2017/02/24  2019/03/23  0       0       0           0

6   d123        2017/03/24  2019/04/23  0       0       1           0

我要开始为特定行,其中Last_dup被1然后上去和比较的变化FeeX。谢谢!


倚天杖
浏览 163回答 1
1回答

侃侃尔雅

我认为为每项政策添加一个“交易编号列”会使这更容易。然后您可以对事务进行重复数据删除以查看是否有“更改”的行。看下面的例子:import pandas as pddat = [['b123', 234, 522], ['b123', 234, 522], ['c123', 34, 23], ['c123', 38, 23], ['c123', 34, 23]]cols = ['Policy_id', 'Fee1', 'Fee2']df = pd.DataFrame(dat, columns=cols)df['transaction_id'] = 1df['transaction_id'] = df.groupby('Policy_id').cumsum()['transaction_id']df2 = df[cols].drop_duplicates()final_df = df2.join(df[['transaction_id']])输出是:      Policy_id  Fee1  Fee2  transaction_id0      b123   234   522               12      c123    34    23               13      c123    38    23               2而且由于b123去重后只有一笔交易,所以您知道没有任何变化。有些东西必须改变c123。您可以使用final_df[final_df.transaction_id > 1].如前所述,您可能需要对日期进行一些其他数学计算,但这应该可以帮助您完成大部分工作。编辑:如果您只想查看最近两个月,您可以在运行上述之前过滤 DataFrame。这个怎么做:为过滤日期创建一个变量,如下所示:from datetime import date, timedeltafiltered_date = date.today() - timedelta(days=60)然后我会使用这个pyjanitor包来使用它的 filter_date 方法。只需过滤您想要的列;我认为这Start_date看起来最合理。import janitorfinal_df.filter_date("Start_date", start=filtered_date)一旦你运行import janitor,final_df就会神奇地拥有filter_date可用的方法。您可以在此处查看更多filter_date示例。
随时随地看视频慕课网APP

相关分类

Python
我要回答