pandas 如何创建从一个 Dataframe 列的升序/降序条件派生的多个 Dataframe

zdwk9cvp  于 2023-03-11  发布在  其他
关注(0)|答案(1)|浏览(104)

我有一个很大的 Dataframe ,看起来像这样

delta_V     Vsd      current    time_(s)   Vg_out    
0      -0.050  -0.198  -2.390e-06  3187.472   9.799  #local maximum      
1      -0.047  -0.198  -2.444e-06  3188.019   9.662       
2      -0.046  -0.198  -2.522e-06  3188.567   9.525        
3      -0.044  -0.198  -2.619e-06  3189.114   9.388        
4      -0.043  -0.198  -2.732e-06  3189.656   9.253 
...
62     -0.049  -0.198  -1.103e-05  3221.261   1.351        
63     -0.049  -0.198  -1.114e-05  3221.803   1.216        
64     -0.049  -0.198  -1.125e-05  3222.352   1.079         
65     -0.049  -0.198  -1.136e-05  3222.898   0.942        
66     -0.049  -0.198  -1.148e-05  3223.446   0.805          
70     -0.049  -0.198  -1.191e-05  3225.626   0.260        
71     -0.049  -0.198  -1.202e-05  3226.171   0.124         
72     -0.049  -0.198  -1.212e-05  3226.720  -0.013         
73     -0.049  -0.198  -1.223e-05  3227.266  -0.150              
77     -0.050  -0.198  -1.265e-05  3229.445  -0.695          
78     -0.050  -0.198  -1.274e-05  3229.993  -0.832
...
        
136    -0.050  -0.198  -1.737e-05  3261.631  -8.741        
137    -0.050  -0.198  -1.742e-05  3262.175  -8.877         
138    -0.050  -0.198  -1.748e-05  3262.721  -9.014               
142    -0.050  -0.198  -1.771e-05  3264.902  -9.559        
143    -0.050  -0.198  -1.777e-05  3265.449  -9.695          
144    -0.050  -0.198  -1.782e-05  3265.997  -9.832          
145    -0.050  -0.198  -1.788e-05  3266.542  -9.969  #local minimum       
146    -0.050  -0.198  -1.793e-05  3267.088  -9.969         
147    -0.050  -0.198  -1.791e-05  3107.275  -9.834  #start ascend again      
148    -0.050  -0.198  -1.778e-05  3107.819  -9.698         
149    -0.050  -0.198  -1.766e-05  3108.363  -9.562          
150    -0.050  -0.198  -1.754e-05  3108.906  -9.426          
151    -0.050  -0.198  -1.743e-05  3109.443  -9.292         
153    -0.050  -0.198  -1.721e-05  3110.524  -9.021         
154    -0.050  -0.198  -1.711e-05  3111.064  -8.886          
155    -0.050  -0.198  -1.700e-05  3111.604  -8.752         
156    -0.050  -0.198  -1.690e-05  3112.149  -8.615         
157    -0.050  -0.198  -1.679e-05  3112.695  -8.479       
158    -0.050  -0.198  -1.669e-05  3113.237  -8.343         
159    -0.050  -0.198  -1.658e-05  3113.783  -8.207        
161    -0.050  -0.198  -1.637e-05  3114.874  -7.934                   
...
1315   -0.049  -0.198  -2.426e-06  3506.023  -9.648       
1316   -0.050  -0.198  -2.409e-06  3506.571  -9.784       
1317   -0.051  -0.198  -2.397e-06  3507.118  -9.921        
1318   -0.051  -0.198  -2.388e-06  3507.665  -9.921

Vg_out列以升序/降序模式跨越从10到-10的值。我想要做的是为Vg_out值的每个升序和降序创建不同的 Dataframe 。具有从9.799到-10的第一个值的(降序) Dataframe ,以及从-10到10的下一个(升序) Dataframe ,等等。
我试着考虑for循环,比如“当下一个Vg_out值更小时,然后将该行放入不同的 Dataframe ”,但我不明白如何表达它,也不明白在Vg_out列的两个连续值相等(比如最后两行)的情况下如何继续。
我是一个noobie在这里没有很强的编程背景,我会感谢任何帮助,非常感谢和欢呼!

编辑:在数据集中连续进行几次上升/下降(扫描)。@mozway建议的当前输出为:

#first dataset ends at `Vg_out` value = 0 
delta_V     Vsd      current    time_(s)   Vg_out    
0      -0.050  -0.198  -2.390e-06  3187.472   9.799       
1      -0.047  -0.198  -2.444e-06  3188.019   9.662
...
71     -0.049  -0.198  -1.202e-05  3226.171   0.124 

#second dataset starts from values<0 and ends again at 0
72     -0.049 -0.198 -1.212e-05  3226.720  -0.013        
73     -0.049 -0.198 -1.223e-05  3227.266  -0.150
...       
218    -0.048 -0.198 -9.649e-06  3146.003  -0.152        
219    -0.048 -0.198 -9.519e-06  3146.548  -0.015

我希望数据集从局部最大值开始,到局部最小值结束。

2eafrhcq

2eafrhcq1#

您可以用途:

# get ascending/descending pattern
patt = df['Vg_out'].gt(0)

# groupby successive ascending/descending
# create a new dataframe
for k, g in df.groupby(patt.ne(patt.shift()).cumsum()):
    g.to_csv(f'group{k+1}.csv')

此处输出:

# first dataframe
   delta_V    Vsd   current  time_(s)  Vg_out
0   -0.050 -0.198 -0.000002  3187.472   9.799
1   -0.047 -0.198 -0.000002  3188.019   9.662
2   -0.046 -0.198 -0.000003  3188.567   9.525
3   -0.044 -0.198 -0.000003  3189.114   9.388
4   -0.043 -0.198 -0.000003  3189.656   9.253

# second dataframe
      delta_V    Vsd   current  time_(s)  Vg_out
1315   -0.049 -0.198 -0.000002  3506.023  -9.648
1316   -0.050 -0.198 -0.000002  3506.571  -9.784
1317   -0.051 -0.198 -0.000002  3507.118  -9.921

相关问题