Tengo dos series s1
y s2
con los mismos índices (no consecutivos). ¿Cómo combino s1
y s2
ser dos columnas en un DataFrame y mantener uno de los índices como una tercera columna?
Tengo dos series s1
y s2
con los mismos índices (no consecutivos). ¿Cómo combino s1
y s2
ser dos columnas en un DataFrame y mantener uno de los índices como una tercera columna?
Respuestas:
Creo que concat
es una buena manera de hacer esto. Si están presentes, utiliza los atributos de nombre de la Serie como columnas (de lo contrario, simplemente los numera):
In [1]: s1 = pd.Series([1, 2], index=['A', 'B'], name='s1')
In [2]: s2 = pd.Series([3, 4], index=['A', 'B'], name='s2')
In [3]: pd.concat([s1, s2], axis=1)
Out[3]:
s1 s2
A 1 3
B 2 4
In [4]: pd.concat([s1, s2], axis=1).reset_index()
Out[4]:
index s1 s2
0 A 1 3
1 B 2 4
Nota: Esto se extiende a más de 2 series.
pd.concat([list_of_dataframes])
concatenar muchas veces new_df = pd.DataFrame(); for df in list_of_dsf: new_df = pd.concat([new_df, df])
o similar.
¿Por qué no usas .to_frame si ambos tienen los mismos índices?
> = v0.23
a.to_frame().join(b)
< v0.23
a.to_frame().join(b.to_frame())
Los pandas alinearán automáticamente estos pasados en serie y crearán el índice conjunto. Aquí resultan ser los mismos. reset_index
mueve el índice a una columna.
In [2]: s1 = Series(randn(5),index=[1,2,4,5,6])
In [4]: s2 = Series(randn(5),index=[1,2,4,5,6])
In [8]: DataFrame(dict(s1 = s1, s2 = s2)).reset_index()
Out[8]:
index s1 s2
0 1 -0.176143 0.128635
1 2 -1.286470 0.908497
2 4 -0.995881 0.528050
3 5 0.402241 0.458870
4 6 0.380457 0.072251
Código de ejemplo:
a = pd.Series([1,2,3,4], index=[7,2,8,9])
b = pd.Series([5,6,7,8], index=[7,2,8,9])
data = pd.DataFrame({'a': a,'b':b, 'idx_col':a.index})
Pandas le permite crear un DataFrame
desde a dict
con Series
los valores y los nombres de las columnas como claves. Cuando encuentra un Series
valor, usa el Series
índice como parte del DataFrame
índice. Esta alineación de datos es una de las principales ventajas de los pandas. En consecuencia, a menos que tenga otras necesidades, lo recién creado DataFrame
tiene un valor duplicado. En el ejemplo anterior, data['idx_col']
tiene los mismos datos que data.index
.
Si puedo responder esto.
Los fundamentos detrás de convertir series a marcos de datos es entender que
1. A nivel conceptual, cada columna en el marco de datos es una serie.
2. Y, cada nombre de columna es un nombre clave que se asigna a una serie.
Si tiene en mente los dos conceptos anteriores, puede pensar en muchas formas de convertir series en marcos de datos. Una solución fácil será así:
Crea dos series aquí
import pandas as pd
series_1 = pd.Series(list(range(10)))
series_2 = pd.Series(list(range(20,30)))
Cree un marco de datos vacío con los nombres de columna que desee
df = pd.DataFrame(columns = ['Column_name#1', 'Column_name#1'])
Poner el valor de la serie dentro del marco de datos usando el concepto de mapeo
df['Column_name#1'] = series_1
df['Column_name#2'] = series_2
Comprueba los resultados ahora
df.head(5)
No estoy seguro de entender completamente tu pregunta, pero ¿es esto lo que quieres hacer?
pd.DataFrame(data=dict(s1=s1, s2=s2), index=s1.index)
( index=s1.index
Ni siquiera es necesario aquí)
Una simplificación de la solución basada en join()
:
df = a.to_frame().join(b)
Usé pandas para convertir mi matriz o iseries numpy a un marco de datos y luego agregué y agregué la columna adicional por clave como 'predicción'. Si necesita convertir el marco de datos a una lista, use values.tolist ()
output=pd.DataFrame(X_test)
output['prediction']=y_pred
list=output.values.tolist()