Mam pandas DF z kolumną o nazwie Grupa składająca się z trzech wartości, które są 1,2 i 3.

Próbuję wykonać następujące czynności, jeśli instrukcja:

if df.group == 1:
   (code here)
elif df.group ==2:
   (code here)
else:
   (code here)

Kiedy próbuję uruchomić mój, jeśli jest pętla, rzuca następujący błąd: ValueError: wartość prawdy serii jest niejednoznaczna. Użyj a.empty, a.bool (), a.item (), a.any () lub a.all ().

Czy muszę używać NP. Gdzie zamiast tego, jeśli jest pętla na Dataframe lub jeśli istnieje sposób, aby osiągnąć to z pętli, jeśli indziej?

1
user3116949 21 luty 2019, 17:51

2 odpowiedzi

Najlepsza odpowiedź

Możesz się tak iterować:

for idx, val in enumerate(df.itertuples()):
    if df.loc[idx, 'group'] == 1:
       print('1')
    elif df.loc[idx, 'group'] ==2:
       print('2')
    else:
       print('3')

Używanie np.where Patrz Tutaj

3
meW 21 luty 2019, 14:55

W twoim przypadku DF.Group jest połączeniem z serią w kolumnie grupy, na przykład:

df = pd.DataFrame({'group':[1,2,3,1,3,3,3,2,1,1]})

df.group

Out[42]: 
0    1
1    2
2    3
3    1
4    3
5    3
6    3
7    2
8    1
9    1
Name: group, dtype: int64

Tak więc nie ma sensu porównać serię [1,2,3,1 ... ] do wartości pojedynczej. To właśnie próbuje ci powiedzieć błąd.

Brzmi, jakbyś próbował pobrać indeksy kolumny dla każdej wartości w zestawie {1,2,3}.

W takim przypadku użyciu:

[i for i,j in enumerate(df.group) if j == 1]

Out[48]: [0, 3, 8, 9]
0
Teghan Nightengale 21 luty 2019, 15:10