【问题标题】:Detecting change is column value and plotting检测变化是列值和绘图
【发布时间】:2021-08-19 02:33:13
【问题描述】:

第 2 列中的我的数据(此处以标题名称 N 显示)包括从 0 到 15 或从 0 到 7 等重复的周期数。第 3 列 CNCN = np.cumsum(np.abs(np.diff(N)))计算

我想根据 CN 值从数据中获取切片。从值 1 到 14 以及从值 29-36 等等,然后绘制 NCN 。 我面临的问题是我必须在绘图之前手动检查切片的 CN 值。我想要一个程序,它可以在 CN 值突然跳跃然后绘图时对数据进行切片


+-------+-----+----+-------+
| index |  N  | CN | Vdiff |
+-------+-----+----+-------+
|   524 |   2 |  1 |   0.0 |
|   525 | 2   |  1 |   0.0 |
|   526 |   2 |  1 |   0.0 |
|     . |     |    |       |
|     . |     |    |       |
|  5900 |  15 | 14 |   0.0 |
|  5901 |  15 | 29 |   0.1 |
|  5902 |   0 | 29 |   0.0 |
|     . |     |    |       |
|     . |     |    |       |
| 33001 |   7 | 36 |   0.0 |
| 33002 |   7 | 36 |   0.0 |
| 33003 |   7 | 43 |   0.1 |
| 33004 |   0 | 43 |   0.0 |
+-------+-----+----+-------+
import matplotlib.pyplot as plt
flt1 = (data['CN'] > 0) & (data['CN'] <= 14) 
Amp1 = data.loc[flt1] 

flt2 = (data['CN'] > 30) & (data['CN'] <= 36)   
Amp2 = data.loc[flt2]  

Amp1.plot(x='N',y='CN',kind='line')

【问题讨论】:

    标签: python pandas dataframe numpy matplotlib


    【解决方案1】:

    如果我正确理解了您的问题,您希望在 CN 的跳跃之间生成图。然后,下面的代码应该做到这一点:

    import matplotlib.pyplot as plt
    
    jump_size = 5 # the size of what you consider to be a "jump" in CN
    idx = list( data.index[data.CN.diff() >= jump_size] + 1 ) # find jump indexes
    
    # if necessary, add the first index and the last index of your data
    if idx[0] != 0: idx = [0]+idx
    if idx[-1] != data.shape[0]: idx = idx+[None]
    
    # produce plots between the jumps in CN
    for imin,imax in zip(idx[:-1], idx[1:]):
        data.iloc[imin:imax].plot(x='N',y='CN',kind='line')
        plt.show()
    

    如果这会产生您想要的结果,请告诉我。

    编辑:根据 cmets 的要求,这里是与以前相同的 for 循环,但使用 matplotlib 绘图而不是直接从 pandas 数据帧绘图:

    for imin,imax in zip(idx[:-1], idx[1:]):
        data_slice = data.iloc[imin:imax]
        plt.plot(data_slice.N, data_slice.CN)
        plt.show()
    

    【讨论】:

    • 第一个代码给出了很好的情节,但第二个代码继续绘制。我认为循环中存在一些问题。当 N==0 由于 cumsum 而从上一行开始 CN 更改时,您的想法是正确的。我想要的一件事是使用 matplotlib 进行绘图,而不是从 pandas 数据框中进行绘图,如果你可以添加它会非常有帮助。谢谢
    • 你能告诉我为什么 jump_size=5 吗?
    • @شاهنواز 。啊,是的,你是对的,第二个循环只有在 N 中没有重复的连续零时才有效。我将编辑那个“替代方式”的答案,因为它通常不起作用。
    • @شاهنواز 。 jump_size=5 没有真正的原因。你也可以设置 jump_size=2。我认为它应该适用于 2 到 7 之间的任何 jump_size 值。
    猜你喜欢
    • 2015-12-11
    • 2021-06-26
    • 2019-04-17
    • 2011-11-24
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    相关资源
    最近更新 更多