如果列不是NaN,则为Pandas Sum Index

时间:2016-01-21 21:52:39

标签: python pandas

我有一个Pandas DataFrame数据,其中以秒为单位的时间是索引,其他列是加速度值。我想加速度值大于60克的总时间。问题是加速可能会持续一段时间超过60克,但会下降然后再次返回。我已经运行了下面的代码,将加速度值不大于或等于60变为" NaN"。有没有办法检查每一行,看它是否不等于" NaN"如果是这样,添加索引(时间)直到达到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

2 个答案:

答案 0 :(得分:1)

IIUC,你想要加速度大于或等于69的sumindex,你应该可以简单地说:

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

答案 1 :(得分: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时,它总计索引。