使用python pandas查找连续相同的值字符串和总和持续时间

时间:2017-03-04 09:42:04

标签: python pandas dataframe

我是大熊猫的新手,我对如何让我的程序工作感到有点困惑。我找到了一些解决方案,但在我的情况下它们不能正常工作。我有以下数据框:

#    Day           Date/Time                   Applicationname
1    2016-11-30    2016-11-30 01:27:47.722     comteslacoilswlauncher
2    2016-11-30    2016-11-30 01:27:52.679     comwhatsapp
3    2016-11-30    2016-11-30 01:27:57.690     comwhatsapp
4    2016-11-30    2016-11-30 01:28:02.690     screen_off

我想要做的是按应用程序名称进行分组,并为每个分组的应用程序名称设置开始/结束时间。对于开始时间,我需要第一次出现应用程序的时间 - 2.5秒,结束时间我需要应用程序最后一次出现的时间+ 2.5秒。在只出现一次的情况下,我只用了一次,开始时为-2.5,结束时为+2.5。例如:

#    Day         Start Date/Time          End Date/Time            Applicationname
1    2016-11-30  2016-11-30 01:27:45.222  2016-11-30 01:27:50.222  comteslacoilswlauncher
2    2016-11-30  2016-11-30 01:27:50.179  2016-11-30 01:28:00.190  comwhatsapp
4    2016-11-30  2016-11-30 01:28:00.190  2016-11-30 01:28:05.190  screen_off

有关如何操作的任何提示?谢谢

2 个答案:

答案 0 :(得分:0)

从您的解决方案示例中,您似乎也希望按天分组,即使您没有明确提及。如果是这样的话,你应该能够做到这样的事情:

grouped = df.groupby(['Day', 'Applicationname'])
min_max = grouped.agg({'Date/Time': [np.min, np.max]})

未经测试:)

答案 1 :(得分:0)

试试这个:

def my_min(ser, delta=pd.Timedelta('2.5 second')):
    return ser.min() - delta

def my_max(ser, delta=pd.Timedelta('2.5 second')):
    return ser.max() + delta


df.groupby('Applicationname').agg({'Day':'first', 'Date/Time': [my_min, my_max]})

结果:

In [27]: df.groupby('Applicationname').agg({'Day':'first', 'Date/Time': [my_min, my_max]})
    ...:
Out[27]:
                              Day               Date/Time
                            first                  my_min                  my_max
Applicationname
comteslacoilswlauncher 2016-11-30 2016-11-30 01:27:45.222 2016-11-30 01:27:50.222
comwhatsapp            2016-11-30 2016-11-30 01:27:50.179 2016-11-30 01:28:00.190
screen_off             2016-11-30 2016-11-30 01:28:00.190 2016-11-30 01:28:05.190