pandas: 基于一列值计算新列
我有一个CSV文件,里面有这样的列(我用 read_csv('fileA.csv', parse_dates=['ProcessA_Timestamp'])
来加载它)
Item ProcessA_Timestamp
'A' 2014-06-08 03:32:20
'B' 2014-06-08 03:32:20
'A' 2014-06-08 03:33:19
'C' 2014-06-08 03:33:20
'B' 2014-06-08 03:33:40
'D' 2014-06-08 03:38:20
我想创建一个叫 ProcessA_ProcessingTime
的新列,这个列的值是某个项目在表中最后一次出现的时间和第一次出现的时间之间的时间差。
另外,我还有其他的数据框(我不太确定这些数据框是否应该合并成一个),它们各自有自己的 Process*_Timestamp
列。
最后,我需要创建一个表格,里面的数据应该像这样:
Item ProcessA_ProcessingTime ProcessB_ProcessingTime ... ProcessX_ProcessingTime
'A' 00:00:59 ...
'B' 00:01:21
'C' NOT FINISHED YET
'D' NOT FINISHED YET
1 个回答
1
你可以使用pandas中的groupby和apply组合。首先根据“Item”对数据进行分组,然后应用一个函数来计算处理时间。大概是这样的:
import pandas as pd
def calc_process_time(row):
ts = row["ProcessA_Timestamp].values
if len(ts) == 1:
return pd.NaT
else:
return ts[-1] - ts[0] #last time - first time
df.groupby("Item").apply(calc_process_time)