Obecnie pracuję z zestawem danych pand (startupy w USA) i próbuję agregować sektory według słów kluczowych. Innymi słowy, muszę przejść przez kolumnę i jeśli wartość zawiera dany ciąg, zastąpić całą wartość nowym ciągiem.

Jeśli już wypróbowano kilka prostych pętli instrukcji „if”, ale wydaje się, że nie mogę uzyskać właściwej składni. Próbowałem też trochę .loc, ale jedyne, co mogę zrobić, to zastąpić wszystkie wartości w kolumnie jednym ciągiem.

Dzięki!

-1
Tommaso 18 grudzień 2019, 01:19
Czy możesz dodać przykładowe dane testowe i oczekiwane wyniki do tego pytania?
 – 
Scott Boston
18 grudzień 2019, 01:20
 – 
Tee
18 grudzień 2019, 01:27

2 odpowiedzi

Prostym sposobem na to jest zapisanie mapowań sektorów do kategorii sektorów jako słownika, a następnie zastosowanie funkcji, która wywołuje to mapowanie.

import pandas as pd

data = pd.DataFrame(["chunky spam", "watery spam", "hard-boiled", "scrambled"])

def mapping(sector):
    mapping_dict = {"chunky spam": "spam", 
                    "watery spam": "spam", 
                    "hard-boiled": "eggs", 
                    "scrambled": "eggs"}

    return mapping_dict[sector]

data[0].apply(mapping)
0
Kevin Troy 18 grudzień 2019, 01:37

Możesz to osiągnąć za pomocą pd.DataFrame.where():

df.where(df.column_name != "str", "replace")

Opierając się na sformułowaniu metody df.where(), zastąpi ona wszystkie wartości, które NIE pasują do warunku. Dlatego używamy zanegowanego !=, gdy szukamy "str" w jakiejś kolumnie. Wszystkie wystąpienia, które są równe "str", zostaną zastąpione ciągiem "replace"

0
pciunkiewicz 18 grudzień 2019, 01:41