我需要每天查看索引值的列表,为了方便阅读,我将它们放入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 我想问一下这个程序是否有捷径? 比如,直接把我的循环结果放到数据框中?
我的列表不断增长,因此我无法每隔一天修复一次代码。
答案 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
,concat
,reindex
,最后删除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