我想为我的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']的值。但是到目前为止,我仍未找到实现此类条件的适当方法。
答案 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)