Powiedzmy: jest ramka danych:
country edition sports Athletes Medals
Germany 1990 Aquatics HAJOS, Alfred silver
Germany 1990 Aquatics HIRSCHMANN, Otto silver
Germany 1990 Aquatics DRIVAS, Dimitrios silver
US 2008 Athletics MALOKINIS, Ioannis silver
US 2008 Athletics HAJOS, Alfred silver
US 2009 Athletics CHASAPIS, Spiridon gold
France 2010 Athletics CHOROPHAS, Efstathios gold
France 2010 golf HAJOS, Alfred silver
France 2011 golf ANDREOU, Joannis silver
Chcę się dowiedzieć, która edycja przyniosła najwięcej srebrnych medali? więc próbuję rozwiązać to za pomocą funkcji grupowania w ten sposób:
df.groupby('Edition')[df['Medal']=='Silver'].count().idxmax()
Ale to mi daje
Key error = 'Columns not found: False, True'
Czy ktoś może mi powiedzieć, na czym polega problem?
5 odpowiedzi
df.groupby('Edition')[df['Medals'=='Silver']].count().idxmax()
Czy powinien mieć pojedynczy cudzysłów w pobliżu medali?
Oto twoja ramka danych pandy:
import pandas as pd
data = [
['Germany', 1990, 'Aquatics', 'HAJOS, Alfred', 'silver'],
['Germany', 1990, 'Aquatics', 'IRSCHMANN, Otto', 'silver'],
['Germany', 1990, 'Aquatics', 'DRIVAS, Dimitrios', 'silver'],
['US', 2008, 'Athletics', 'MALOKINIS, Ioannis', 'silver'],
['US', 2008, 'Athletics', 'HAJOS, Alfred', 'silver'],
['US', 2009, 'Athletics', 'CHASAPIS, Spiridon', 'gold'],
['France', 2010, 'Athletics', 'CHOROPHAS, Efstathios', 'gold'],
['France', 2010, 'golf', 'HAJOS, Alfred', 'silver'],
['France', 2011, 'golf', 'ANDREOU, Joannis', 'silver']
]
df = pd.DataFrame(data, columns = ['country', 'edition', 'sports', 'Athletes', 'Medals'])
print(df)
country edition sports Athletes Medals
0 Germany 1990 Aquatics HAJOS, Alfred silver
1 Germany 1990 Aquatics IRSCHMANN, Otto silver
2 Germany 1990 Aquatics DRIVAS, Dimitrios silver
3 US 2008 Athletics MALOKINIS, Ioannis silver
4 US 2008 Athletics HAJOS, Alfred silver
5 US 2009 Athletics CHASAPIS, Spiridon gold
6 France 2010 Athletics CHOROPHAS, Efstathios gold
7 France 2010 golf HAJOS, Alfred silver
8 France 2011 golf ANDREOU, Joannis silver
Teraz możesz po prostu przefiltrować srebrne medale, a następnie wydanie groupby
(pamiętaj, że 'Edition'
wyrzuci KeyError
w przeciwieństwie do 'edition'
) i ostatecznie wyliczyć:
df[df.Medals == 'silver'].groupby('edition').count()['Medals'].idxmax()
>>> 1990
Df [df ['Medal'] == 'srebrny']. groupby ('edycja'). rozmiar (). idxmax ()
Próbowałem tego i zadziałało! właśnie zastąpiłem count () rozmiarem ()
Powinieneś liczyć na wydanie na medal:
>>> df = pd.DataFrame({'edition':[1990,1990,1990,2008,2008,2009,2010,2010,2011],'Medals':['silver','silver','silver','silver','silver','gold','gold','silver','silver']})
>>> df['count'] = ''
>>> df['count'] = df.groupby(['edition','Medals']).transform('count')
Następnie wykonaj filtrowanie na max ():
>>> df = df[df['Medals'].isin(['silver'])]
>>> df
edition Medals count
0 1990 silver 3
1 1990 silver 3
2 1990 silver 3
3 2008 silver 2
4 2008 silver 2
7 2010 silver 1
8 2011 silver 1
>>> df = df[df['count'].isin([df['count'].max()])]
>>> df
edition Medals count
0 1990 silver 3
1 1990 silver 3
2 1990 silver 3
Lub
>>> df[df['count'].isin([df['count'].max()])]['Medals'].unique()[0]
'silver'
Możesz pogrupować według obu kolumn, aby rozwiązać:
df[df['Medals'] == 'silver'].groupby(['edition','Medals'],as_index=True)['Athletes'].count().idxmax()
# Outcome:
(1990, 'silver')
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.
df['Medals' == 'Silver']
to prawie to samo, co powiedzeniedf[False]
, ponieważ „Medale” i „Srebro” to nie to samo. AleFalse
nie jest kolumną w ramce danych, więc wyświetla ten błąd. Spróbuj tego:df[df['Medals']=='silver'].groupby('Edition').count().idxmax()
df[df['Medals']=='silver'].groupby('edition')['Medals'].count().idxmax()
. Przepraszamy „Edycja” nie jest kolumną, więc nie możesz pogrupować według tego