Python 数据帧内列表的元素差异
我有一个数据框,其中一列(LOG_TIMES)中有列表,如何创建一个具有列表元素时差(以秒为单位)的新列Python 数据帧内列表的元素差异,python,pandas,Python,Pandas,我有一个数据框,其中一列(LOG_TIMES)中有列表,如何创建一个具有列表元素时差(以秒为单位)的新列 DATE_RECORDED PERSON LOG_TIMES 0 2018-03-22 11:58:23.585 JOHN [15/03/2018 10:30:48, 15/03/2018 10:29:48, ... 1 2018-03-22 11:58:23.585 JOHN [20/03/2018 14:28:36, 20/03/2018
DATE_RECORDED PERSON LOG_TIMES
0 2018-03-22 11:58:23.585 JOHN [15/03/2018 10:30:48, 15/03/2018 10:29:48, ...
1 2018-03-22 11:58:23.585 JOHN [20/03/2018 14:28:36, 20/03/2018 14:26:36, ...
预期的输出将是datafame,其中有一列显示时间差(以秒为单位的值):
对于
df
:
DATE_RECORDED PERSON LOG_TIMES
0 2018-03-22 11:58:23.585 JOHN [15/03/2018 10:30:48, 15/03/2018 10:29:48]
1 2018-03-22 11:58:23.585 JOHN [20/03/2018 14:28:36, 20/03/2018 14:26:36, 20/03/2018 14:26:30]
你需要:
df['LOG_TIMES'] = df['LOG_TIMES'].apply(lambda x: list(pd.Series([dt.datetime.strptime(y.strip(), '%d/%m/%Y %H:%M:%S') for y in x[1:-1].split(',')]).diff().astype('timedelta64[s]').dropna().mul(-1)))
输出:
DATE_RECORDED PERSON LOG_TIMES
0 2018-03-22 11:58:23.585 JOHN [60.0]
1 2018-03-22 11:58:23.585 JOHN [120.0, 6.0]
如果df['LOG_TIMES']
已经有了datetime
对象的列表,您只需使用:
df['LOG_TIMES'].apply(lambda x: list(pd.Series(x).diff().astype('timedelta64[s]').dropna().mul(-1)))
你能发布预期的结果吗?@HarvIpan刚刚编辑了这个问题!如果您可以发布实际值而不是假设值,那就太好了。@HarvIpan刚刚更改了它,谢谢。这返回了我:AttributeError:“list”对象没有属性“split”是
类型(df['LOG_TIMES'][0])
list
?我想是的。我通常远离像这样的问题,因为OP显然没有努力使其易于理解或解决他们的问题。要么忽视,要么在更糟糕的情况下投票关闭。一些用户只粘贴他们的代码,一些用户只粘贴他们的数据,而另一些用户仍然没有发布。这两个问题都是最好的,因为你可以直观地看到OP的问题,并通过他们发布的代码了解他们试图做什么。谢谢@HarvIpan你的解决方案工作得很好,我只需要进行一些类型转换。
df['LOG_TIMES'].apply(lambda x: list(pd.Series(x).diff().astype('timedelta64[s]').dropna().mul(-1)))