functions - python pandas download windows
Cómo hacer ''vista lateral explotar()'' en pandas (1)
Método 1 (OP)
pd.DataFrame([[item]+list(df.loc[line,''B'':]) for line in df.index for item in df.loc[line,''A'']],
columns=df.columns)
Método 2 (pir)
df1 = df.A.apply(pd.Series).stack().rename(''A'')
df2 = df1.to_frame().reset_index(1, drop=True)
df2.join(df.B).reset_index(drop=True)
Método 3 (pir)
A = np.asarray(df.A.values.tolist())
B = np.stack([df.B for _ in xrange(A.shape[1])]).T
P = np.stack([A, B])
pd.Panel(P, items=[''A'', ''B'']).to_frame().reset_index(drop=True)
Gracias @ user113531 por la referencia a la respuesta de Alexander. Tuve que modificarlo para que funcione.
Método 4 (@Alexander) RESPUESTA ENLAZADA
(Siga el enlace y Voto arriba si esto fue útil)
rows = []
for i, row in df.iterrows():
for a in row.A:
rows.append([a, row.B])
pd.DataFrame(rows, columns=df.columns)
Tiempos
Método 4 (Alexander) es el mejor seguido por el Método 3
Quiero hacer esto :
# input:
A B
0 [1, 2] 10
1 [5, 6] -20
# output:
A B
0 1 10
1 2 10
2 5 -20
3 6 -20
El valor de cada columna A es una lista
df = pd.DataFrame({''A'':[[1,2],[5,6]],''B'':[10,-20]})
df = pd.DataFrame([[item]+list(df.loc[line,''B'':]) for line in df.index for item in df.loc[line,''A'']],
columns=df.columns)
El código anterior puede funcionar, pero es muy lento
¿Hay algún método inteligente?
Gracias