unir juntar data concatenar como combinar columnas python pandas series dataframe

python - juntar - Combinación de dos Series en un DataFrame en pandas



juntar dos columnas en python (6)

Tengo dos Series s1 y s2 con los mismos índices (no consecutivos). ¿Cómo combino s1 y s2 para que sean dos columnas en un DataFrame y guardo uno de los índices como una tercera columna?


¿Por qué no usa simplemente .to_frame si ambos tienen los mismos índices?

a.to_frame().join(b.to_frame())

^^ Esto no funcionará si se intenta ''unir'' dos series de pandas


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 un dict con Series como los valores y los nombres de las columnas como las claves. Cuando encuentra una Series como un valor, utiliza el índice de la Series como parte del índice de DataFrame . Esta alineación de datos es una de las principales ventajas de Pandas. En consecuencia, a menos que tenga otras necesidades, el DataFrame recién creado tiene un valor duplicado. En el ejemplo anterior, los data[''idx_col''] tienen los mismos datos que data.index .


Creo que concat es una buena forma 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.


Los Pandas alinearán automáticamente estos pasados ​​en serie y crearán el índice conjunto. Pasan a ser lo mismo aquí. 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


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)