unir datos dataframes data concatenate columna agrupar agregar python dataframe pandas

python - datos - pandas union dataframe



pandas: combina dos columnas en un DataFrame (5)

Las versiones de pandas más modernas (desde al menos 0.12) tienen los combine_first() y update() para los objetos DataFrame y Series. Por ejemplo, si su DataFrame se llamara df , usted haría:

df.bar.combine_first(df.foo)

que solo alteraría los valores de Nan de la columna de la bar para coincidir con la columna foo , y lo haría en el lugar. Para sobrescribir los valores que no son Nan en la bar con los de foo , usaría el método update() .

Tengo un DataFrame pandas que tiene varias columnas en él:

Index: 239897 entries, 2012-05-11 15:20:00 to 2012-06-02 23:44:51 Data columns: foo 11516 non-null values bar 228381 non-null values Time_UTC 239897 non-null values dtstamp 239897 non-null values dtypes: float64(4), object(1)

donde foo y bar son columnas que contienen los mismos datos, pero se nombran de manera diferente. ¿Hay alguna forma de mover las filas que forman foo en bar , idealmente manteniendo el nombre de bar ?

Al final, el DataFrame debería aparecer como:

Index: 239897 entries, 2012-05-11 15:20:00 to 2012-06-02 23:44:51 Data columns: bar 239897 non-null values Time_UTC 239897 non-null values dtstamp 239897 non-null values dtypes: float64(4), object(1)

Es decir, los valores de NaN que componían la barra fueron reemplazados por los valores de foo .


Otra opción, use el método .apply() en el marco. Puede hacer reasignar una columna con deferencia a los datos existentes ...

import pandas as pd import numpy as np # get your data into a dataframe # replace content in "bar" with "foo" if "bar" is null df["bar"] = df.apply(lambda row: row["foo"] if row["bar"] == np.NaN else row["bar"], axis=1) # note: change ''np.NaN'' with null values you have like an empty string


Prueba esto:

pandas.concat([df[''foo''].dropna(), df[''bar''].dropna()]).reindex_like(df)

Si desea que los datos se conviertan en la nueva bar columnas, simplemente asigne el resultado a df[''bar''] .


Puedes hacerlo usando numpy también.

df[''bar''] = np.where(pd.isnull(df[''bar'']),df[''foo''],df[''bar''])


puede utilizar directamente fillna y asignar el resultado a la columna ''barra''

df[''bar''].fillna(df[''foo''], inplace=True) del df[''foo'']

ejemplo general:

import pandas as pd #creating the table with two missing values df1 = pd.DataFrame({''a'':[1,2],''b'':[3,4]}, index = [1,2]) df2 = pd.DataFrame({''b'':[5,6]}, index = [3,4]) dftot = pd.concat((df1, df2)) print dftot #creating the dataframe to fill the missing values filldf = pd.DataFrame({''a'':[7,7,7,7]}) #filling print dftot.fillna(filldf)