将循环中的结果写入python

时间:2016-11-15 07:23:37

标签: python python-2.7

我需要每天查看索引值的列表,为了方便阅读,我将它们放入DataFrame中。我正在使用Python 2.7

首先,我将答案输入一个列表:

index_list = [df1,df2,df3,df4,df5,df6,df7] 
value_list = [20,22,28,29,30,31,32,33]
myarray = []

def minimum(dataframe,value):
    return dataframe['Datetime'][(dataframe["IDXType"] == value)].min()

for i in index_list:
    for value_i in value_list:
        myarray.append(minimum(i,value_i))

这将输出一个56镜头长的列表,然后我手动将它放到数据帧中。

result = {'df1':pd.Series(myarray[0:8], index=value_list),
  'df2':pd.Series(myarray[8:16], index=value_list),
  'df3':pd.Series(myarray[16:24], index=value_list),
  'df4':pd.Series(myarray[24:32], index=value_list),
  'df5':pd.Series(myarray[32:40], index=value_list),
  'df6':pd.Series(myarray[40:48], index=value_list),
  'df7':pd.Series(myarray[48:56], index=value_list),
  }
result = pd.DataFrame(result)
result

显示8 * 7数据帧。如下所示:

Expected Result 我想问一下这个程序是否有捷径? 比如,直接把我的循环结果放到数据框中?

我的列表不断增长,因此我无法每隔一天修复一次代码。

1 个答案:

答案 0 :(得分:0)

您可以使用:

public class Point {
    private  int mProgram, mPositionHandle, mColorHandle, mMVPMatrixHandle;
    private FloatBuffer vertexBuffer,colorBuffer;
    private static final int COORDS_PER_VERTEX = 3;
    private static final int COORDS_PER_COLOR = 4;
    private  int vertexCount,colorCount;


    private final String vertexShaderCode =
            "uniform mat4 uMVPMatrix;" +
                    "attribute vec4 vPosition;" +
                    "attribute mediump vec4 vColor;" +
                    "varying mediump vec4 vaColor;" +
                    "void main() {" +
                    "  vaColor = vColor;" +
                    "  gl_Position = uMVPMatrix * vPosition;" +
                    "   gl_PointSize = 100.0;" +
                    "}";

    private final String fragmentShaderCode =
            "precision mediump float;" +
                    "varying mediump vec4 vaColor;" +
                    "void main() {" +
                    "  gl_FragColor = vaColor;" +
                    "}";


    private static int vertexStride = COORDS_PER_VERTEX * 4;
    private final int colorStride = COORDS_PER_COLOR * 4;


    public Point(float pointCoords[],float colorCoords[]){
        this.vertexCount = pointCoords.length / COORDS_PER_VERTEX;
        this.colorCount = colorCoords.length / COORDS_PER_COLOR;

        FloatBuffer[] buffers = getBuffers(pointCoords,colorCoords);



        vertexBuffer = buffers[0];
        colorBuffer = buffers[1];


        int vertexShader = MyGLRenderer.loadShader(GLES20.GL_VERTEX_SHADER,
                vertexShaderCode);
        int fragmentShader = MyGLRenderer.loadShader(GLES20.GL_FRAGMENT_SHADER,
                fragmentShaderCode);

        // create empty OpenGL ES Program
        mProgram = GLES20.glCreateProgram();

        // add the vertex shader to program
        GLES20.glAttachShader(mProgram, vertexShader);

        // add the fragment shader to program
        GLES20.glAttachShader(mProgram, fragmentShader);

        // creates OpenGL ES program executables
        GLES20.glLinkProgram(mProgram);


        // Add program to OpenGL ES environment
        GLES20.glUseProgram(mProgram);

        // get handle to vertex shader's vPosition member
        mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition");


        mColorHandle = GLES20.glGetAttribLocation(mProgram,"vColor");

        // get handle to shape's transformation matrix
        mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");
    }

    public void draw(float[] mvpMatrix) {

        // Enable a handle to the triangle vertices
        GLES20.glEnableVertexAttribArray(mPositionHandle);

        // Prepare the point coordinate data
        GLES20.glVertexAttribPointer(mPositionHandle, COORDS_PER_VERTEX,
                GLES20.GL_FLOAT, false,
                vertexStride, vertexBuffer);



        GLES20.glEnableVertexAttribArray(mColorHandle);
        // Set color for drawing the triangle
        GLES20.glVertexAttribPointer(mColorHandle, COORDS_PER_COLOR, GLES20.GL_FLOAT, false,
                colorStride, colorBuffer);


        //TRANSLATION
        float[] transMatrix = new float[16];

        Matrix.setIdentityM(transMatrix,0);
        Matrix.translateM(transMatrix,0,0.5f,0,0);
        Matrix.multiplyMM(transMatrix,0,mvpMatrix,0,transMatrix,0);


        // Apply the projection and view transformation
        GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0);

        GLES20.glDrawArrays(GLES20.GL_POINTS, 0, vertexCount);

        // Disable vertex array
        GLES20.glDisableVertexAttribArray(mPositionHandle);
    }

    /**
     * Change content of buffer
     */
    public void changeBufferData(float[] newBufferInfo) {
//        GLES20.glBufferSubData(?,0,newBufferInfo.length*4,vertexBuffer);
    }

    private FloatBuffer[] getBuffers(float pointCoords[],float colorCoords[]){
        ByteBuffer vbb = ByteBuffer.allocateDirect(pointCoords.length * 4);
        vbb.order(ByteOrder.nativeOrder());
        FloatBuffer vertexBuffer = vbb.asFloatBuffer();
        vertexBuffer.put(pointCoords);
        vertexBuffer.position(0);

        ByteBuffer cbb = ByteBuffer.allocateDirect(colorCoords.length * 4);
        cbb.order(ByteOrder.nativeOrder());
        FloatBuffer colorBuffer = cbb.asFloatBuffer();
        colorBuffer.put(colorCoords);
        colorBuffer.position(0);

        return new FloatBuffer[]{vertexBuffer,colorBuffer};
    }


    }
df1 = pd.DataFrame({'Datetime':pd.date_range('2015-01-04','2015-01-08'),
                    'IDXType':[20,20,33,33,33]})

print (df1)
    Datetime  IDXType
0 2015-01-04       20
1 2015-01-05       20
2 2015-01-06       33
3 2015-01-07       33
4 2015-01-08       33

df2 = pd.DataFrame({'Datetime':pd.date_range('2015-01-04','2015-01-08'),
                   'IDXType':[30,30,21,21,10]})

print (df2)
    Datetime  IDXType
0 2015-01-04       30
1 2015-01-05       30
2 2015-01-06       21
3 2015-01-07       21
4 2015-01-08       10

df3 = pd.DataFrame({'Datetime':pd.date_range('2015-01-04','2015-01-08'),
                   'IDXType':[20,20,30,31,31]})

print (df3)
    Datetime  IDXType
0 2015-01-04       20
1 2015-01-05       20
2 2015-01-06       30
3 2015-01-07       31
4 2015-01-08       31

我的解决方案groupby并汇总index_list = [df1,df2,df3] value_list = [20,22,28,29,30,31,32,33] myarray = [] def minimum(dataframe,value): return dataframe.loc[dataframe["IDXType"] == value, 'Datetime'].min() for i in index_list: for value_i in value_list: myarray.append(minimum(i,value_i)) #print (myarray) result = { 'df1':pd.Series(myarray[0:8], index=value_list), 'df2':pd.Series(myarray[8:16], index=value_list), 'df3':pd.Series(myarray[16:24], index=value_list) } result = pd.DataFrame(result) print (result) df1 df2 df3 20 2015-01-04 NaT 2015-01-04 22 NaT NaT NaT 28 NaT NaT NaT 29 NaT NaT NaT 30 NaT 2015-01-04 2015-01-06 31 NaT NaT 2015-01-07 32 NaT NaT NaT 33 2015-01-06 NaT NaT concatreindex,最后删除min rename_axis({{1}中的新内容}} index name):

pandas

您还可以在0.18.0使用print (df1.groupby('IDXType')['Datetime'].min()) IDXType 20 2015-01-04 33 2015-01-06 Name: Datetime, dtype: datetime64[ns] df = pd.concat([df1.groupby('IDXType')['Datetime'].min(), df2.groupby('IDXType')['Datetime'].min(), df3.groupby('IDXType')['Datetime'].min()], axis=1, keys=('df1','df2','df3')).reindex(value_list).rename_axis(None) print (df) df1 df2 df3 20 2015-01-04 NaT 2015-01-04 22 NaT NaT NaT 28 NaT NaT NaT 29 NaT NaT NaT 30 NaT 2015-01-04 2015-01-06 31 NaT NaT 2015-01-07 32 NaT NaT NaT 33 2015-01-06 NaT NaT 中使用更具动态性的解决方案,但需要为新concat中的列名称添加新列表:

list comprehension