我正在分析來自不同傳感器的數據。傳感器在使用時變爲活動狀態(1)。但是,我只需要第一次和最後一次激活的時間(和日期),但不需要從中間開始。找到時,我需要創建一個新的DataFrame,其中第一個和最後一個匹配項的時間和日期以及'User'和'Activity'。如何獲取熊貓物品的首次和最後一次出現
我試着遍歷每一行並構建一系列if-then語句,但沒有運氣。 我想知道是否有一個熊貓函數可以讓我有效地做到這一點? 這是我的數據的一個子集。
我剛剛開始得到熊貓的叮咬,所以任何幫助將不勝感激。
乾杯!
import pandas as pd
cols=['User', 'Activity', 'Coaster1', 'Coaster2', 'Coaster3',
'Coaster4', 'Coaster5', 'Coffee', 'Door', 'Fridge', u'coldWater',
'hotWater', 'SensorDate', 'SensorTime', 'RegisteredTime']
data=[['Chris', 'coffee + hot water', 0, 0.0, 0.0, 0, 0, 0.0, 1.0, 0.0,
0.0, 0.0, '2015-09-21', '13:05:54', '13:09:00'],
['Chris', 'coffee + hot water', 0, 0.0, 0.0, 0, 0, 0.0, 1.0, 0.0,
0.0, 0.0, '2015-09-21', '13:05:54', '13:09:00'],
['Chris', 'coffee + hot water', 0, 0.0, 0.0, 0, 0, 0.0, 1.0, 0.0,
0.0, 0.0, '2015-09-21', '13:05:55', '13:09:00'],
['Chris', 'coffee + hot water', 0, 0.0, 0.0, 0, 0, 0.0, 1.0, 0.0,
0.0, 0.0, '2015-09-21', '13:05:55', '13:09:00'],
['Chris', 'coffee + hot water', 0, 0.0, 0.0, 0, 0, 0.0, 1.0, 0.0,
0.0, 0.0, '2015-09-21', '13:05:56', '13:09:00'],
['Chris', 'coffee + hot water', 0, 0.0, 0.0, 0, 0, 0.0, 1.0, 0.0,
0.0, 0.0, '2015-09-21', '13:05:56', '13:09:00'],
['Chris', 'coffee + hot water', 0, 1.0, 0.0, 0, 0, 0.0, 0.0, 0.0,
0.0, 0.0, '2015-09-21', '13:05:58', '13:09:00'],
['Chris', 'coffee + hot water', 0, 1.0, 0.0, 0, 0, 0.0, 0.0, 0.0,
0.0, 0.0, '2015-09-21', '13:05:59', '13:09:00']]
df=pd.DataFrame(data,columns=cols)
所需的輸出將如下所示:
data_out=[['Chris','coffee + hot water','0','0','0','0','0','0','1','0','0','0','2015-09-21','13:05:54','13:05:56','13:09:00'],['Chris','coffee + hot water','0','1','0','0','0','0','0','0','0','0','2015-09-21','13:05:58','13:05:59','13:09:00']]
cols_out=['User',
'Activity',
'Coaster1',
'Coaster2',
'Coaster3',
'Coaster4',
'Coaster5',
'Coffee',
'Door',
'Fridge',
u'coldWater',
'hotWater',
'SensorDate',
'SensorTimeFirst',
'SensorTimeLast',
'RegisteredTime']
df_out=pd.DataFrame(data_out, columns=cols_out)
樣品的期望輸出是什麼? – jezrael
也許你可以試試'print df [df ['Door'] == 1] .groupby(['User','Activity'])[['Door','SensorDate','SensorTime']]。min )'和 'print df [df ['Door'] == 1] .groupby(['User','Activity'])[['Door','SensorDate','SensorTime']] .max() ' – jezrael
在OP中添加了所需的輸出編輯。謝謝! – Waldo