Cómo iterar sobre DataFrame y generar un nuevo DataFrame

Tengo un dataframe se parece a esto:

PQL 1 2 3 2 3 4 5 6,7 

El objective es comprobar si hay algún valor en L , si hay que extraer el valor en la columna L y P

 PL 1 3 4,6 4,7 

Tenga en cuenta que podría haber más de un valor en L , en el caso de más de 1 valor, necesitaría filas.

A continuación se encuentra mi script actual, no puede generar el resultado esperado.

 df2 = [] ego other newrow = [] for item in data_DF.iterrows(): if item[1]["L"] is not None: ego = item[1]['P'] other = item[1]['L'] newrow = ego + other + "\n" df2.append(newrow) data_DF2 = pd.DataFrame(df2) 

Primero, extraigo varios valores de la columna L a los nuevos marcos de datos con un índice de duplicidad del índice original. Eliminar las columnas innecesarias L y Q Luego, agregue la salida a las filas df y drop originales con valores de NaN .

 print df PQL 0 1 2 3 1 2 3 NaN 2 4 5 6,7 s = df['L'].str.split(',').apply(pd.Series, 1).stack() s.index = s.index.droplevel(-1) # to line up with df's index s.name = 'L' print s 0 3 2 6 2 7 Name: L, dtype: object df = df.drop( ['L', 'Q'], axis=1) df = df.join(s) print df PL 0 1 3 1 2 NaN 2 4 6 2 4 7 df = df.dropna().reset_index(drop=True) print df PL 0 1 3 1 4 6 2 4 7 

Primero, puede extraer todas las filas de las columnas L y P donde L no falta, así:

 df2 = df[~pd.isnull(df.L)].loc[:, ['P', 'L']].set_index('P') 

A continuación, puede tratar los múltiples valores en algunas de las L filas restantes de la siguiente manera:

 df2 = df2.L.str.split(',', expand=True).stack() df2 = df2.reset_index().drop('level_1', axis=1).rename(columns={0: 'L'}).dropna() df2.L = df2.L.str.strip() 

Para explicar: con P como index , el código divide el contenido de string de la columna L en ',' y distribuye los elementos individuales en varias columnas. A continuación, astack las diversas columnas nuevas en una sola columna nueva y limpia el resultado.