如果条件python熊猫的索引计数器

时间:2019-03-07 15:26:27

标签: python pandas

我想为我的dataFrame生成某种周期。在下面的示例中,一个循环的长度为4。最后一列是应该显示的样子,其余的是代表我的尝试。

我当前的代码如下:

import pandas as pd
import numpy as np

l = list(np.linspace(0,10,12))
data = [
        ('time',l),
         ('A',[0,5,0.6,-4.8,-0.3,4.9,0.2,-4.7,0.5,5,0.1,-4.6]),
         ('B',[ 0,300,20,-280,-25,290,30,-270,40,300,-10,-260]),
         ]
df = pd.DataFrame.from_dict(dict(data))
length = len(df)
df.loc[0,'cycle']=1
df['cycle'] = length/4 +df.loc[0,'cycle']
i = 0
for i in range(0,length):
    df.loc[i,'new_cycle']=i+1
df['want_cycle']=   [1,1,1,1,2,2,2,2,3,3,3,3]  
print(length)
print(df)

我确实需要代码中的if条件,例如,如果索引计数器为4,也仅增加df ['new_cycle']的值。但是到目前为止,我仍未找到实现此类条件的适当方法。

2 个答案:

答案 0 :(得分:0)

尝试使用默认范围索引,因为您的数据框行索引是一个以0(数据框的默认索引)开头的范围,因此您可以使用下限分隔来计算周期:

df['cycle'] = df.index//4 + 1

输出:

         time    A    B  cycle
0    0.000000  0.0    0      1
1    0.909091  5.0  300      1
2    1.818182  0.6   20      1
3    2.727273 -4.8 -280      1
4    3.636364 -0.3  -25      2
5    4.545455  4.9  290      2
6    5.454545  0.2   30      2
7    6.363636 -4.7 -270      2
8    7.272727  0.5   40      3
9    8.181818  5.0  300      3
10   9.090909  0.1  -10      3
11  10.000000 -4.6 -260      3

现在,如果您的数据框索引不是默认索引,则可以使用以下内容:

df['cycle'] = [df.index.get_loc(i) // 4 + 1 for i in  df.index]

答案 1 :(得分:0)

我只为您添加了一件东西,一个名为new_cycle的新变量,它将保留您所需要的计数。

在for循环中,我们正在检查i是否可被4整除而没有余数,如果是的话,我们要在新变量中加1,然后用该值填充数据框和你一样。

import pandas as pd
import numpy as np

l = list(np.linspace(0,10,12))
data = [
        ('time',l),
         ('A',[0,5,0.6,-4.8,-0.3,4.9,0.2,-4.7,0.5,5,0.1,-4.6]),
         ('B',[ 0,300,20,-280,-25,290,30,-270,40,300,-10,-260]),
         ]
df = pd.DataFrame.from_dict(dict(data))
length = len(df)
df.loc[0,'cycle']=1
df['cycle'] = length/4 +df.loc[0,'cycle']
new_cycle = 0
for i in range(0,length):
    if i % 4 == 0:
        new_cycle += 1
    df.loc[i,'new_cycle']= new_cycle
df['want_cycle'] = [1,1,1,1,2,2,2,2,3,3,3,3]  
print(length)
print(df)