如何解决如何在熊猫数据框中创建一列以验证状态转换是否发生?
以下是原始数据框:
uid timestamp state
1 2015-01-01 fail
2 2015-01-07 fail
2 2015-03-02 fail
1 2015-01-03 pass
1 2015-01-02 warn
2 2015-03-01 pass
1 2015-01-04 pass
1 2015-01-07 pass
2 2015-01-01 warn
这是我想生成的结果数据框:
uid timestamp state fail->pass?
1 2015-01-01 fail True
2 2015-01-07 pass False
2 2015-03-02 fail False
1 2015-01-03 pass True
1 2015-01-02 warn True
2 2015-03-01 pass False
1 2015-01-04 pass True
1 2015-01-07 pass True
2 2015-01-01 warn False
“失败->通过?” column是一个布尔列,它告诉您UID是否从失败状态变为通过状态。此传递状态必须是UID的最终状态。下降状态可以在最终状态之前的任何时间发生。最终状态发生在该UID的最新时间戳。
创建此列的最有效方法是什么?每个UID可能存在数百个状态转换。
解决方法
df = pd.DataFrame({'uid': [1,2,1,2],'timestamp': ['2015-01-01','2015-01-07','2015-03-02','2015-01-03','2015-01-02','2015-03-01','2015-01-04','2015-01-01'],'state': ['fail','pass','fail','warn','warn'],'fail->pass?': [True,False,True,False]})
df['timestamp'] = pd.to_datetime(df['timestamp'])
df = df.sort_values(by='timestamp')
fp = (df[['uid','state']].groupby('uid').last()=='pass').reset_index()
fp.columns = ['uid','fail->pass?']
df.merge(fp,on='uid').sort_values(by='timestamp')
输出
uid timestamp state fail->pass?
0 1 2015-01-01 fail True
5 2 2015-01-01 warn False
1 1 2015-01-02 warn True
2 1 2015-01-03 pass True
3 1 2015-01-04 pass True
4 1 2015-01-07 pass True
6 2 2015-01-07 fail False
7 2 2015-03-01 pass False
8 2 2015-03-02 fail False
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。