Python Pandas:具有特定索引的重复for循环
我的数据框如下所示:Python Pandas:具有特定索引的重复for循环,python,pandas,Python,Pandas,我的数据框如下所示: time event 2019-01-01 01:27:00 crossing down 1 2019-01-01 01:36:00 crossing up 2 2019-01-01 01:42:00 crossing down 3 2019-01-01 01:55:00 crossing up 4 2019-01-01 01:58:00
time event
2019-01-01 01:27:00 crossing down
1 2019-01-01 01:36:00 crossing up
2 2019-01-01 01:42:00 crossing down
3 2019-01-01 01:55:00 crossing up
4 2019-01-01 01:58:00 crossing down
5 2019-01-01 01:59:00 crossing up
6 2019-01-01 02:00:00 crossing down
7 2019-01-01 02:17:00 crossing up
up_trend_time = (df.groupby((df['event'] == 'crossing down').cumsum())['time'].diff()
.dropna().dt.total_seconds().floordiv(60).tolist())
down_trend_time = (df.groupby((df['event'] == 'crossing up').cumsum())['time'].diff()
.dropna().dt.total_seconds().floordiv(60).tolist())
up_trend_time
[9.0, 13.0, 1.0, 17.0]
down_trend_time
[6.0, 3.0, 1.0]
我需要做的是计算趋势之间的平均时间(向下交叉到向上交叉“上升趋势”,或向上交叉到向下交叉“下降趋势”)。我需要的是一个所有上升趋势的数组,所以从2019-01-01 01:36:00交叉到2019-01-01:27:00交叉的时间,加上2019-01-01-01:55:00交叉到2019-01-01:42:00交叉的时间等等。。。。以及所有下降趋势的一个数组,因此在1 2019-01-01 01:36:00交叉
和2 2019-01-01 01:42:00交叉
之间的时间。。。到目前为止,我尝试的是:
for index,row in df_trend.iterrows():
if df_trend.loc[0, 'event'] == 'crossing down':
up_trend_time = np.append(up_trend_time,(df_trend.loc[index+1, 'time'] - df_trend.loc[index, 'time']))
elif df_trend.loc[0, 'event'] == 'crossing up':
down_trend_time = np.append(up_trend_time,(df_trend.loc[index+1, 'time'] - df_trend.loc[index, 'time']))
但是它没有给我预期的输出:数组向上趋势时间=[9,7,1,17]
和向下趋势时间=[6,3,1]
,有什么帮助吗?谢谢
另外,我的当前代码有以下错误:
'the label [1676] is not in the [index]'
你可以这样做:
time event
2019-01-01 01:27:00 crossing down
1 2019-01-01 01:36:00 crossing up
2 2019-01-01 01:42:00 crossing down
3 2019-01-01 01:55:00 crossing up
4 2019-01-01 01:58:00 crossing down
5 2019-01-01 01:59:00 crossing up
6 2019-01-01 02:00:00 crossing down
7 2019-01-01 02:17:00 crossing up
up_trend_time = (df.groupby((df['event'] == 'crossing down').cumsum())['time'].diff()
.dropna().dt.total_seconds().floordiv(60).tolist())
down_trend_time = (df.groupby((df['event'] == 'crossing up').cumsum())['time'].diff()
.dropna().dt.total_seconds().floordiv(60).tolist())
up_trend_time
[9.0, 13.0, 1.0, 17.0]
down_trend_time
[6.0, 3.0, 1.0]