索引步数不大于1的总行。PandasPython

问题描述 投票:0回答:1

我有脚传感器数据,我想计算摆动时间的标准差。

数据框看起来像这样:

       Time     Force 
83      0.83    80
84      0.84    60
85      0.85    40
86      0.86    20
87      0.87    0
88      0.88    0
89      0.89    20
90      0.90    40
91      0.91    60
92      0.92    40
93      0.93    0
94      0.94    0
95      0.95    0
96      0.96    20

因此,当力== 0时,我做了:

df[(df['Force']==0)]

结果:

       Time     Force 
87      0.87    0
88      0.88    0
93      0.93    0
94      0.94    0
95      0.95    0

现在,我想总结每次挥杆的时间。挥杆1 =索引87 + 88,挥杆2 =索引93 + 94 + 95

我该如何实现?如何对索引步长不大于1的行求和?(想象一下,我有成千上万的行可以累加)

我尝试了类似的复杂循环:

swing_durations = []
start = []
start.append(0)
swings_left = swing_times_left.reset_index(drop = True)

for subject in swings_left[['filename']]:
    i = 1
    for time in swings_left['Time'][1:-1]:
        j = i - 1
        k = swings_left.where(swings_left['Time'].loc[i] - swings_left['Time'].loc[j] > 0.01)
        if k == True:    
            start.append(time)
            swing_durations.append(swings_left[['Time']].loc[j] - start[j])
        i = i + 1

    totalswingtime_l['filename'== subject]['Variance'] = swing_durations.std()

导致错误

感谢您的帮助!

python
1个回答
0
投票

一种解决方案是为每个连续的0组创建一个ID。

这是(df.Force.shift()!=(df.Force)).cumsum()所做的。之后,仅使用np.where保留包含0的组。

In [83]: df["swing_id"] = np.where(df.Force==0, (df.Force.shift()!=(df.Force)).cumsum(),np.nan)
    ...: df
Out[83]: 
    Time  Force  swing_id
0   0.83     80       NaN
1   0.84     60       NaN
2   0.85     40       NaN
3   0.86     20       NaN
4   0.87      0       5.0
5   0.88      0       5.0
6   0.89     20       NaN
7   0.90     40       NaN
8   0.91     60       NaN
9   0.92     40       NaN
10  0.93      0      10.0
11  0.94      0      10.0
12  0.95      0      10.0
13  0.96     20       NaN


In [84]: df.groupby("swing_id")["Time"].sum()
Out[84]: 
swing_id
5.0     1.75
10.0    2.82
Name: Time, dtype: float64
© www.soinside.com 2019 - 2024. All rights reserved.