繁体   English   中英

比较 Pandas dataframe 中不同行的两个值

[英]Compare two values for different rows in Pandas dataframe

我有一个按idsub_id分组的具有不同提交时间的提交记录数据集。 id下会有多个sub_id不同的提交,表示它们是原始事件的子事件。 例如:

id    sub_id     submission_time       valuation_time            amend_time
G1    Original   2021-05-13T00:11:05Z  2021-05-13T00:12:05Z      
G1    Valuation  2021-05-13T06:11:05Z  2021-05-13T06:12:10Z                    
G1    Amend      2021-05-14T08:09:01Z  2021-05-14T09:09:05Z      2021-05-18T19:19:15Z
G2    Original   2021-04-12T00:11:05Z  2021-04-12T00:12:05Z      
G2    Valuation  2021-04-12T06:11:05Z  2021-04-12T06:12:10Z      
...    

我想通过数据集valuation_time并检查sub_id == "Valuation"的评估时间是否在同一id参考下sub_id == "Original"submission_time时间之后。 如果这是真的,我想输入一个新列并填充sub_id == "Valuation"pass ,否则为fail

我非常感谢您在这方面的帮助,因为我对这个挑战一无所知。 太感谢了。

请试试这个

import datetime
df=pd.read_excel('C:\MyCodes\samplepython.xlsx')
df['Status']=''
df_new=pd.DataFrame()
for index, row in df.iterrows():
    sub_time = datetime.datetime.strptime(row['submission_time'], "%Y-%m- 
    %dT%H:%M:%SZ")
    val_time = datetime.datetime.strptime(row['valuation_time'], "%Y-%m- 
    %dT%H:%M:%SZ")
    if row['sub_id']=='Valuation' and val_time>sub_time:
        row['Status']='Pass'
    elif row['sub_id']=='Valuation' and val_time<=sub_time:
        row['Status']='Fail'
    df_new=df_new.append(row)

代码:

import datetime
import pandas as pd

list_values=[['G1','Original',datetime.datetime.strptime('2021-05-13T00:11:05Z', "%Y-%m-%dT%H:%M:%SZ"),datetime.datetime.strptime('2021-05-13T00:12:05Z', "%Y-%m-%dT%H:%M:%SZ")], 
[< please load other values>],
['G2','Valuation',datetime.datetime.strptime('2021-04-12T06:11:05Z', "%Y-%m-%dT%H:%M:%SZ"),datetime.datetime.strptime('2021-04-12T06:12:10Z', "%Y-%m-%dT%H:%M:%SZ")]]

df=pd.DataFrame(list_values,columns = ['id', 'sub_id', 
                         'submission_time', 'valuation_time'])
df.sort_values(by=['id', 'sub_id'])
status=[]
level=0
for index,row in df.iterrows():
  if level==0 and row['sub_id']=='Original': 
    sub_time=row['submission_time']
    status.append('')
    level+=1
  elif level==1 and row['sub_id']=='Valuation':
    val_time=row['valuation_time']
    if sub_time>val_time:
        status.append('Fail') 
    else:
        status.append('Pass')
    level=0
  else:
    level=0
    status.append('')
df["Status"]=status
print(df)

结果: 在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM