J'ai une base de données avec deux lignes et j'aimerais fusionner les deux lignes en une ligne. Le df se présente comme suit:
PC Rating CY Rating PY HT
0 DE101 NaN AA GV
0 DE101 AA+ NaN GV
J'ai essayé de créer deux images distinctes et de les combiner avec df.merge (df2) sans succès. Le résultat devrait être le suivant
PC Rating CY Rating PY HT
0 DE101 AA+ AA GV
Des idées? Merci d'avance La mise à jour pourrait-elle être une solution possible?
MODIFIER:
df.head(1).combine_first(df.tail(1))
Cela fonctionne pour l'exemple ci-dessus. Cependant, pour les colonnes contenant des valeurs numériques, cette approche ne produit pas le résultat souhaité, par exemple: pour
PC Rating CY Rating PY HT MV1 MV2
0 DE101 NaN AA GV 0 20
0 DE101 AA+ NaN GV 10 0
Le résultat devrait être:
PC Rating CY Rating PY HT MV1 MV2
0 DE101 AA+ AA GV 10 20
La formule ci-dessus ne résume pas les valeurs des deux dernières colonnes, mais prend les valeurs de la première ligne du cadre de données.
PC Rating CY Rating PY HT MV1 MV2
0 DE101 AA+ AA GV 0 20
Comment ce problème pourrait-il être résolu?
Vous pouvez utiliser la méthode DF.combine_first()
après avoir séparé la DF
en 2 parties où les valeurs nulles de la première moitié seraient remplacées par les valeurs finies de l'autre moitié tout en conservant ses autres valeurs finies:
df.head(1).combine_first(df.tail(1))
# Practically this is same as → df.head(1).fillna(df.tail(1))
S'il y a des colonnes de types de données mixtes, les partitionner en ses colonnes dtype
constitutives, puis effectuer diverses opérations dessus serait réalisable en les chaînant.
obj_df = df.select_dtypes(include=[np.object])
num_df = df.select_dtypes(exclude=[np.object])
obj_df.head(1).combine_first(obj_df.tail(1)).join(num_df.head(1).add(num_df.tail(1)))
Vous pouvez utiliser max
avec transpose comme
In [2103]: df.max().to_frame().T
Out[2103]:
PC Rating CY Rating PY HT MV1 MV2
0 DE101 AA+ AA GV 10 20