我有一个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
答案 0 :(得分:1)
IIUC,你想要加速度大于或等于69的sum
值index
,你应该可以简单地说:
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时,它总计索引。