删除列中包含特定值的行,条件是上面行上的列的值

时间:2016-12-06 17:01:57

标签: python pandas

我有以下数据框

df = pd.DataFrame({'State': {0: "case_created", 1: "case_reopened", 2:"email_sent", 3: "case_reopened", 4: "email_sent", 5: "case_reopened", 6 : "email_sent", 7: "case_reopened"}, 
           'date': {0: '2016-10-13T14:10:41Z', 1: '2016-10-13T14:10:41Z', 2:'2016-10-13T15:26:19Z',
                    3: '2016-10-14T15:26:19Z', 4: '2016-10-15T15:26:19Z', 5: '2016-10-18T15:26:19Z',
                    6 :'2016-10-17T15:26:19Z', 7: '2016-10-13T15:26:19Z'}}, columns=['State', 'date'])

我正在尝试计算(case_created OR case_reopened)和email_sent之间的时间。

问题在于,由于我无法编辑的奇怪的工作流程解决方法,有时在case_created时间戳或另一个case_reopened时间戳之后存在无意义的case_reopened时间戳。可以安全地丢弃这些无意义的case_reopened时间戳。

我正在使用shift

 df = df.loc[df["state"].shift() != df["state"]] 

摆脱case_reopened - > case_reopened案例,但我不知道如何修复case_created - > case_reopened案例。然后我打算用.diff()来计算时差。

1 个答案:

答案 0 :(得分:1)

也许您可以尝试使用'email_sent'找到行。然后计算'email_sent'和最后'email_sent'之后的条目之间的时差。如下:

df['date'] = pd.to_datetime(df['date'])
email_sent = df['State']=='email_sent'
rs  = [0,]
for idx, v in email.iteritems():
if v:
    rs.append(idx)
    rs.append(idx+1)
df['date'][rs].diff()