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

使用python查找连续的相同值字符串和总和持续时间,python,pandas,dataframe,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 comwha

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

#    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
我要做的是按应用程序名称分组,并为每个分组的applicationname设置开始/结束时间。对于开始时间,我需要应用程序第一次出现的时间-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

有没有关于怎么做的提示?感谢您

从您的解决方案示例来看,您似乎也希望按天分组,尽管您没有明确提到这一点。如果是这种情况,您应该能够执行以下操作:

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

未测试:)

从您的解决方案示例来看,您似乎也希望按天分组,即使您没有明确提到这一点。如果是这种情况,您应该能够执行以下操作:

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

尝试以下操作:

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
试试这个:

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