Viac na
Python Pandas: Získanie indexu riadkov, ktorých stĺpec zodpovedá určitej hodnote
Vzhľadom na DataFrame so stĺpcom "BoolCol" chceme nájsť indexy DataFrame, v ktorých sú hodnoty pre "BoolCol" == True
Momentálne mám na to iteračný spôsob, ktorý funguje perfektne:
for i in range(100,3000):
if df.iloc[i]['BoolCol']== True:
print i,df.iloc[i]['BoolCol']
Ale toto nie je správny panda's spôsob, ako to urobiť. Po určitom výskume v súčasnosti používam tento kód:
df[df['BoolCol'] == True].index.tolist()
Ten mi dáva zoznam indexov, ale tie sa nezhodujú, keď ich skontrolujem vykonaním:
df.iloc[i]['BoolCol']
Výsledok je skutočne False!!
Ktorý by bol správny spôsob Pandy?
220
3
df.iloc[i]
vrátiiaty
riadok zdf
.i
neodkazuje na indexový štítok,i
je index založený na 0.Naopak, atribút
index
vracia skutočné označenia indexov, nie číselné indexy riadkov:alebo ekvivalentne,
Rozdiel môžete celkom jasne vidieť pri hre s DataFrame s s iným ako predvoleným indexom, ktorý sa nerovná číselnej pozícii riadku:
Ak chcete použiť index,
vtedy môžete vybrať riadky pomocou
loc
namiestoiloc
:Všimnite si, že
loc
môže akceptovať aj logické polia:Ak máte boolovské pole
maska
a potrebujete hodnoty poradových indexov, môžete ich vypočítať pomocounp.flatnonzero
:Na výber riadkov podľa poradového indexu použite
df.iloc
:Možno to vykonať pomocou funkcie numpy where():
Hoci nie vždy potrebujete index pre zhodu, ale v prípade, že potrebujete:
Najskôr môžete skontrolovať
query
, keď je cieľový stĺpec typubool
(PS: o tom, ako ho použiť, si pozrite link )Po filtrovaní pôvodného df podľa stĺpca Boolean môžeme vybrať index .
Aj pandy majú
nonzero
, jednoducho vyberieme pozíciu riadkuTrue
a pomocou nej nakrájameDataFrame
aleboindex