使用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