2017-03-04 55 views
1

我是熊貓新手,我對如何讓程序工作感到困惑。我發現了一些解決方案,但在我的情況下它們不能正常工作。我有以下數據框:使用python熊貓來查找連續的相同的值字符串和總持續時間

# 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 

任何提示如何做到這一點?謝謝

回答

0

從您的解決方案示例中,您似乎也希望按天進行分組,即使您沒有明確提及這一點。如果是這樣的話,你應該能夠做這樣的事情:

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

沒有測試:)

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