如何将数据帧拆分为峰值组

2024-09-27 07:28:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图分析excel文件中的数据集

示例数据:

Time in s  Displacement in mm    Force in N
          0                   0  Not Relevant
          1                   1  Not Relevant
          2                   2  Not Relevant
          3                   3  Not Relevant
          4                   2  Not Relevant
          5                   1  Not Relevant
          6                   0  Not Relevant
          7                   2  Not Relevant
          8                   3  Not Relevant
          9                   4  Not Relevant
         10                   5  Not Relevant
         11                   6  Not Relevant
         12                   5  Not Relevant
         13                   4  Not Relevant
         14                   3  Not Relevant
         15                   2  Not Relevant
         16                   1  Not Relevant
         17                   0  Not Relevant
         18                   4  Not Relevant
         19                   5  Not Relevant
         20                   6  Not Relevant
         21                   7  Not Relevant
         22                   6  Not Relevant
         23                   5  Not Relevant
         24                   4  Not Relevant
         24                   0  Not Relevant

从xls文件导入,然后绘制时间与位移图:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_excel(
    'DATA.xls',
    engine='xlrd', usecols=['Time in s', 'Displacement in mm', 'Force in N'])


fig, ax = plt.subplots()
ax.plot(df['Time in s'], df['Displacement in mm'])

ax.set(xlabel='Time (s)', ylabel='Disp',
       title='time disp')
ax.grid()

fig.savefig("time_disp.png")
plt.show()

我想将数据分成多个组,分别进行分析。 所以如果我绘制位移与时间的关系图,我得到一个sawtooth,因为样本是循环加载的

我想分割数据,这样每个“牙齿”都是它自己的组或数据集,这样我就可以分析每个周期

有人能帮忙吗


Tags: 文件数据indftime绘制notplt
1条回答
网友
1楼 · 发布于 2024-09-27 07:28:44

您可以创建一个列组,该列组的值在每个局部最小值处都会发生变化。首先在局部最小值处得到True,并使用两个^{},一个向前,一个向后。然后使用^{}来增加组数,每次都会增加一个局部最小值

df['gr'] = (~(df['Deplacement'].diff(1)>0) 
             & ~(df['Deplacement'].diff(-1)>0)).cumsum()
print(df)
    Time  Deplacement  gr
0      0            0   1
1      1            1   1
2      2            2   1
3      3            3   1
4      4            2   1
5      5            1   1
6      6            0   2
7      7            2   2
8      8            3   2
9      9            4   2
10    10            5   2
11    11            6   2
12    12            5   2
13    13            4   2
14    14            3   2
15    15            2   2
16    16            1   2
17    17            0   3
18    18            4   3
19    19            5   3

您可以通过单独选择每个组来拆分数据,也可以使用循环执行某些操作,并在每个循环中执行任何您想要的操作

s = (~(df['Deplacement'].diff(1)>0) 
      & ~(df['Deplacement'].diff(-1)>0)).cumsum()
for _, dfg in df.groupby(s):
    print(dfg)
    # analyze as needed

编辑:如果问题中的数据最小值为0,那么执行df['gr'] = df['Deplacement'].eq(0).cumsum()也可以,但具体来说,最小值正好为0

相关问题 更多 >

    热门问题