Pandas:分组和重新索引后在行之间操作

2024-10-03 02:46:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据帧,有1000行,如下所示:

 x.head()
         id                       jname  wbdqueue_id       startdatetime  \
59  1341127   ondemand_build_baspen-w7g        26581 2017-07-31 23:14:56
60  1341126      ondemand_qa_qforchecka        26581 2017-07-31 23:15:35
61  1341125      ondemand_build_bchecka        26581 2017-07-31 23:14:56
63  1341123   ondemand_build_baspen-w7f        26581 2017-07-31 23:10:05
64  1341122  ondemand_update_waspen-w7a        26581 2017-07-31 23:09:32

           enddatetime
59 2017-07-31 23:19:12
60 2017-07-31 23:34:12
61 2017-07-31 23:15:30
63 2017-07-31 23:14:56
64 2017-07-31 23:10:00

我想,对于每个wbdqueue id,得到ondemand\u update\u waspen-w7a的startdatetime和ondemand\u build\u baspen-w7g的enddatetime之间的差异。该怎么做?你知道吗

我导入CSV文件并将startdatetimeenddatetime解析为时间。然后我按wbdqueue\u id分组,我的想法是按jname索引每个组,这样我就可以找到我需要的两个jname的开始和结束时间戳。 但是当我这样做的时候,所有其他的值都变成了NaN或NaT(对于时间列)。你知道吗

-沙钦


Tags: 数据buildid时间updateheadondemandstartdatetime
3条回答

我会用所描述的逻辑编写一个函数,使事情变得非常明确,后续代码也很容易理解:

import pandas as pd


def get_time_diff(dff):
    start_time = dff[dff.jname.eq('ondemand_update_waspen-w7a')].startdatetime.values[0]
    end_time = dff[dff.jname.eq('ondemand_build_baspen-w7g')].enddatetime.values[0]
    return pd.Timedelta(end_time - start_time)

然后可以在group-by操作中使用函数:

df.groupby('wbdqueue_id').apply(get_time_diff)

这将产生:

wbdqueue_id
26581   00:09:40
dtype: timedelta64[ns]

请注意,我使用的是end_time - start_time,因为从逻辑上讲,您希望返回一个正的时间增量,并且结束时间总是大于开始时间。你知道吗

我希望这是有目的的。你知道吗

如果您只需要在结果中使用statrdatetime和enddatetime之间的差异,您可以试试这个。你知道吗

df1=df.loc[df.jname.isin(['ondemand_update_waspen-w7a','ondemand_build_baspen-w7f']),:]
df1.groupby('wbdqueue_id').apply(lambda x:x.startdatetime-x.enddatetime.shift())[4]


Out[467]: 
wbdqueue_id
26581.0   -1 days +23:55:00
Name: 4, dtype: timedelta64[ns]
df.set_index('jname').groupby('wbdqueue_id').apply(
    lambda x: x.at['ondemand_update_waspen-w7a', 'startdatetime'] \
            - x.at['ondemand_build_baspen-w7f', 'enddatetime']
)

wbdqueue_id
26581   -1 days +23:54:36
dtype: timedelta64[ns]

相关问题 更多 >