熊猫在范围内迭代。两次相同的号码?

时间:2015-09-17 10:46:47

标签: python pandas dataframe concat

我已经编写了这段代码,但我的输出并不像预期的那样。似乎for循环在第一次迭代中运行两次然后错过第二次并直接跳到第三次迭代。我无法看到我出错的地方,但有人可以指出错误吗?谢谢!

以下代码:

i = 0
df_int = df1[(df1.sLap > df_z.Entry[i]) & (df1.sLap < df_z.Exit[i]) & (df1.NLap == Lap1)]

df_Entry = df_int.groupby(df_int.BCornerEntry).aggregate([np.mean, np.std])


df_Entry.rename(index={1:  'T'+str(df_z['Turn Number'][i])}, inplace=True)

for i in range(len(df_z)):
    df_int = df1[(df1.sLap > df_z.Entry[i]) & (df1.sLap < df_z.Exit[i]) & (df1.NLap == Lap1)]

    df_Entry2 = df_int.groupby(df_int.BCornerEntry).aggregate([np.mean, np.std])

    df_Entry2.rename(index={1:  'T'+str(df_z['Turn Number'][i])}, inplace=True)

    df_Entry = pd.concat([df_Entry, df_Entry2])

df_z是一个excel文档,其数据如下:

    Turn Number  Entry  Exit
0             1    321   441
1             2    893  1033
2             3   1071  1184
3             4   1234  1352
4             5   2354  2454
5             6   2464  2554
6             7   2574  2689
7             8   2955  3120..... and so on

然后df1是一个巨大的DataFrame,有30列和10行数千行(因此是平均值和标准行)。

我的输出应该是:

                tLap            
                mean       std      
BCornerEntry                                                          
T1              6.845490  0.591227      
T2             14.515195  0.541967      
T3             19.598690  0.319181     
T4             21.555500  0.246757     
T5             34.980000  0.518170     
T6             37.245000  0.209284     
T7             40.220541  0.322800.... and so on     

但是我得到了这个:

                tLap            
                mean       std      
BCornerEntry                                                          
T1              6.845490  0.591227      
T1              6.845490  0.591227      
T3             19.598690  0.319181     
T4             21.555500  0.246757     
T5             34.980000  0.518170     
T6             37.245000  0.209284     
T7             40.220541  0.322800..... and so on    

T2仍然是T1且数字相同?我做错了什么?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

而不是range(len(df_z),请尝试使用:

for i in range(1, len(df_z)):
    ...

因为range从0开始,并且i = 0的情况已经在for循环之前完成(因此,它被包含两次)。