Ich habe Daten und haben zu konvertieren Datenrahmen Pandas mit:Ändern Datenrahmen Pandas Basis einer Serie
import pandas as pd
d = [
(1,70399,0.988375133622),
(1,33919,0.981573492596),
(1,62461,0.981426807114),
(579,1,0.983018778374),
(745,1,0.995580488899),
(834,1,0.980942505189)
]
df_new = pd.DataFrame(e, columns=['source_target']).sort_values(['source_target'], ascending=[True])
und ich brauche Spalte Serie für das Mapping bauen source
und target
in eine andere
e = []
for x in d:
e.append(x[0])
e.append(x[1])
e = list(set(e))
df_new = pd.DataFrame(e, columns=['source_target'])
df_new.source_target = (df_new.source_target.diff() != 0).cumsum() - 1
new_ser = pd.Series(df_new.source_target.values, index=new_source_old).drop_duplicates()
so erhalte ich Serie :
source_target
1 0
579 1
745 2
834 3
33919 4
62461 5
70399 6
dtype: int64
Ich habe versucht, Dataframezu ändernbasierend auf new_ser
Serie mit:
df_beda.target = df_beda.target.mask(df_beda.target.isin(new_ser), df_beda.target.map(new_ser)).astype(int)
df_beda.source = df_beda.source.mask(df_beda.source.isin(new_ser), df_beda.source.map(new_ser)).astype(int)
aber Ergebnis ist:
source target weight
0 0 70399 0.988375
1 0 33919 0.981573
2 0 62461 0.981427
3 579 0 0.983019
4 745 0 0.995580
5 834 0 0.980943
es falsch ist, ideales Ergebnis ist:
source target weight
0 0 6 0.988375
1 0 4 0.981573
2 0 5 0.981427
3 1 0 0.983019
4 2 0 0.995580
5 3 0 0.980943
vielleicht jemand mir zeigen, wo mein Fehler
helfenDanke
ich meine Frage aktualisieren ... thx :) – ihsansat
WAW .... es; s Arbeit ... thx :) – ihsansat
Hallo @ Happy001, es ist nicht Serie richtig mit? Wenn ich von Ihrem Ergebnis in den ursprünglichen Wert zurückkehren möchte, wie kann ich das tun? – ihsansat