1 回答
TA贡献1801条经验 获得超16个赞
我认为为每项政策添加一个“交易编号列”会使这更容易。然后您可以对事务进行重复数据删除以查看是否有“更改”的行。
看下面的例子:
import pandas as pd
dat = [['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'] = 1
df['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_id
0 b123 234 522 1
2 c123 34 23 1
3 c123 38 23 2
而且由于b123去重后只有一笔交易,所以您知道没有任何变化。有些东西必须改变c123。
您可以使用final_df[final_df.transaction_id > 1].
如前所述,您可能需要对日期进行一些其他数学计算,但这应该可以帮助您完成大部分工作。
编辑:如果您只想查看最近两个月,您可以在运行上述之前过滤 DataFrame。
这个怎么做:
为过滤日期创建一个变量,如下所示:
from datetime import date, timedelta
filtered_date = date.today() - timedelta(days=60)
然后我会使用这个pyjanitor包来使用它的 filter_date 方法。只需过滤您想要的列;我认为这Start_date看起来最合理。
import janitor
final_df.filter_date("Start_date", start=filtered_date)
一旦你运行import janitor,final_df就会神奇地拥有filter_date可用的方法。
您可以在此处查看更多filter_date示例。
添加回答
举报