我有一个数据框:

> df = batch Code.  time 
>       a     100.  2019-08-01 00:59:12.000
>       a     120.  2019-08-01 00:59:32.000
>       a     130.  2019-08-01 00:59:42.000
>       a     120.  2019-08-01 00:59:52.000
>       b     100.  2019-08-01 00:44:11.000
>       b     140.  2019-08-02 00:14:11.000
>       b     150.  2019-08-03 00:47:11.000
>       c     150.  2019-09-01 00:44:11.000
>       d     100.  2019-08-01 00:10:00.000
>       d     100.  2019-08-01 00:10:05.000
>       d     130.  2019-08-01 00:10:10.000
>       d     130.  2019-08-01 00:10:20.000

我想知道每个组从第一个‘100’代码到最后一个‘130’代码之间的秒数. 如果对于一个组,后面没有代码100和代码130(其中一个缺失)-PUT NaN. 因此,输出应为:

df2 = batch duration
        a      30
        b.     nan
        c.     nan
        d.     20

做这件事最好的方法是什么?

推荐答案

使用:

#convert values to datetimes
df['time'] = pd.to_datetime(df['time'])
   
#get first 100 Code per batch 
s1=df[df['Code.'].eq(100)].drop_duplicates('batch').set_index('batch')['time']
#get last 130 Code per batch 
s2=df[df['Code.'].eq(130)].drop_duplicates('batch', keep='last').set_index('batch')['time']

#subtract and convert to timedeltas
df = (s2.sub(s1)
        .dt.total_seconds()
        .reindex(df['batch'].unique())
        .reset_index(name='duration'))
print (df)
  batch  duration
0     a      30.0
1     b       NaN
2     c       NaN
3     d      20.0

Python-3.x相关问答推荐

如何创建多个日志(log)文件

如何在输入正确的用户名和密码时添加按钮?

Django 3.2/Django-cms 3.11:查找错误:型号帐户.客户用户未注册

十进制浮点数到整型的转换错误

在循环中使用Print&S结束参数时出现奇怪的问题

我正在try 从 10*3 矩阵中删除随机值并将其变为 10*2 矩阵

在不使用 split 函数的情况下从字符串中分割逗号(','),句号('.')和空格(' '),将字符串的单词附加到列表中

根据按不同列中的值分组的平均值划分 DataFrame

无法使用 curve_fit() 在 python 中复制高斯函数的曲线拟合

单击图形时 plotly graph_objects 持久性数据

来自嵌套字典的完整地址

机器学习实验笔记本的工作区 url

将名字转换成姓氏、首字母和中间字母的格式

Python - 使用 OpenCV 将字节图像转换为 NumPy 数组

预分配一个无列表

如何从左到右解包元组?

python total_ordering:为什么使用 __lt__ 和 __eq__ 而不是 __le__?

Python 类型提示语法如何/为什么起作用?

如何使用python将放置在多个嵌套文件夹中的文档移动和重命名为一个新的单个文件夹?

使用完整路径激活 conda 环境