Remplacer les valeurs de colonne en fonction d'un autre poneys pandas dataframe - une meilleure façon?
Remarque:pour des raisons de simplicité, je suis en utilisant un jouet exemple, parce que le copier/coller dataframes est difficile de débordement de pile (s'il vous plaît laissez-moi savoir si il ya un moyen facile de le faire).
Est-il un moyen de fusionner les valeurs d'un dataframe sur un autre sans obtenir le _X, _Y colonnes? J'aimerais que les valeurs d'une colonne à remplacer toutes les valeurs zéro d'une autre colonne.
df1:
Name Nonprofit Business Education
X 1 1 0
Y 0 1 0 <- Y and Z have zero values for Nonprofit and Educ
Z 0 0 0
Y 0 1 0
df2:
Name Nonprofit Education
Y 1 1 <- this df has the correct values.
Z 1 1
pd.merge(df1, df2, on='Name', how='outer')
Name Nonprofit_X Business Education_X Nonprofit_Y Education_Y
Y 1 1 1 1 1
Y 1 1 1 1 1
X 1 1 0 nan nan
Z 1 1 1 1 1
Dans un précédent post, j'ai essayé combine_First et dropna(), mais ce n'est pas faire le travail.
Je veux remplacer les zéros dans df1 avec les valeurs df2.
En outre, je veux toutes les lignes avec le même nom à changer selon df2.
Name Nonprofit Business Education
Y 1 1 1
Y 1 1 1
X 1 1 0
Z 1 1 1
Ma solution existante effectue les opérations suivantes:
Je sous-ensemble fondé sur les noms qui existent dans df2, et de remplacer ces valeurs par la valeur correcte. Cependant, je voudrais un moins hacky façon de le faire.
pubunis_df = df2
sdf = df1
regex = str_to_regex(', '.join(pubunis_df.ORGS))
pubunis = searchnamesre(sdf, 'ORGS', regex)
sdf.ix[pubunis.index, ['Education', 'Public']] = 1
searchnamesre(sdf, 'ORGS', regex)
source d'informationauteur user3314418
Vous devez vous connecter pour publier un commentaire.
Utilisez la fonction booléenne masque de
code isin
pour filtrer les df et affectez les valeurs de ligne de la rhs df:Dans [27]:
C'est la bonne.
[4 lignes x 4 colonnes]
Le ci-dessus ne fonctionne que lorsque toutes les lignes dans df1 existe dans le df . En d'autres termes df doit être super jeu de df1
Encas si vous avez quelques non correspondance des lignes de df en df1,vous devez suivre ci-dessous
En d'autres termes df n'est pas sur-ensemble de df1 :