Szukam sposobu, aby wypełnić brakującą wartość za pomocą 1 lub 0 na podstawie warunku oceny innej zmiennej funkcji.

Uproszczona forma zestawu danych:

**Show       Time_watched    Completed**
GOT             400            1
The Office     424            1
Breaking Bad    325            0
GOT             325            0
The Office      344            NaN
Breaking Bad    325            1

Chcę wypełnić brakującą wartość za pomocą stanu, że: jeśli czasu_watched jest większa niż średnia / trzecia kwantowa time_watched na pokaz, wypełnij 1 innym 0

W tym podobnym przykładzie, aby wypełnić NAN w wypełnionej kolumnie, idealnie funkcja powinna porównywać 344mins o średnim przekazie "Pokaż" The Office "i zdecyduj, aby wstawić 1 lub 0.

Próbuję różnych funkcji Fillna, Groupby, Transform i Lambda, ale nie jestem w stanie wygenerować pożądanego wyjścia. Doceń pomoc

0
Gitesh 27 październik 2020, 22:40

1 odpowiedź

Najlepsza odpowiedź

Spróbuj tego:

mean_val = df.groupby("Show")["Time_watched"].transform("mean")
df["Completed"] = (
    df["Completed"].fillna((df["Time_watched"] > mean_val)).astype(int)
)

Wynik:

           Show  Time_watched  Completed
0           GOT           400          1
1    The Office           424          1
2  Breaking Bad           325          0
3           GOT           325          0
4    The Office           344          0
5  Breaking Bad           325          1

Najpierw oblicz średnio przez pokazanie przy użyciu groupby za pomocą transform następnie porównaj, że każda wartość i fillna.


Kwant 75%

q75 = df.groupby("Show")["Time_watched"].transform(pd.Series.quantile, q=.75)
df['Complete'] = df["Completed"].fillna((df["Time_watched"] > q75)).astype(int)

Wynik:

           Show  Time_watched  Completed  Complete
0           GOT           400        1.0         1
1    The Office           424        1.0         1
2  Breaking Bad           325        0.0         0
3           GOT           325        0.0         0
4    The Office           344        NaN         0
5  Breaking Bad           325        1.0         1
1
Scott Boston 28 październik 2020, 01:51