2016-01-21 93 views
1

我有一個Pandas DataFrame數據,其中以秒爲單位的時間是索引,其他列是加速度值。我希望加速度值大於60克的總時間。問題是一段時間內加速度可能會高於60克,但會下降,然後再回來。我已經運行下面的代碼將加速度值不大於或等於60的變成「NaN」。是否有辦法檢查每一行以查看它是否不等於「NaN」,如果是這樣,則添加索引(時間),直到達到NaN再次記錄總時間,然後重新開始。Pandas Sum Index如果列不是NaN

shot1_gt60 = shot1_df.where(shot1_df['CH7 [g] RMS']>=60) 
shot1_gt60.head() 

Time [s] CH7 [g] RMS  
-0.250000 NaN 
-0.249995 65 
-0.249990 67 
-0.249985 90 
-0.249980 NaN 
+0

你可以做一個循環與df.iterrows() – Kikohs

+0

我沒有多少運氣嘗試。 –

回答

1

IIUC和你想要的index值,其中加速度大於或等於69的sum,你應該能夠簡單:

shot1_df[shot1_df['CH7 [g] RMS']>=60].index.to_series().sum() 
+0

這給了我所有的時間總數超過60(69)。我需要每套NaN之間的總數。 CH7 [g] RMS數據有多個從數字到NaN的變化,我需要從NaN到數字的每個變化的總和。 –

0

這是我的解決方案,雖然不是我的數據。我從here得到了解決方案。

# Some data 
d = {'one' : [-.2, .2, -.1, .5, .6, .7, -.7, .4, -.9, .3]} 

# convert to a dataframe 
df = pd.DataFrame(d) 

# check if the 'one' column is >=0 and put the results in a new column '>=0' 
df['>=0'] = df[df>=0] 

# create a new column called 'block' and if the next row in the column '>=0' is null then create 
# then go up by one. 
df['block'] = (df['>=0'].shift(1).isnull()).astype(int).cumsum() 

# drop all the NaN values in the data 
df.dropna(inplace=True) 

# group by the block and sum the index. 
x = df.reset_index().groupby(['block'])['index'].sum() 
df, x 

( one >=0 block 
1 0.2 0.2  2 
3 0.5 0.5  3 
4 0.6 0.6  3 
5 0.7 0.7  3 
7 0.4 0.4  4 
9 0.3 0.3  5, block 
2  1 
3 12 
4  7 
5  9 
Name: index, dtype: int64) 

因此,當'one'中的值爲> = 0時,它總計索引。