2017-01-09 3 views
-13

Daten stammen aus dem United States Census Bureau. Grafschaften sind politische und geographische Untergliederungen von Staaten in den Vereinigten Staaten. Dieser Datensatz enthält Bevölkerungsdaten für Grafschaften und Staaten in den USA von 2010 bis 2015.Pandas Funktion Operationen

In welchem ​​Bundesstaat sind die meisten Grafschaften? (Hinweis: Bitte beachten Sie den Summenschlüssel sorgfältig! Sie werden dies auch für zukünftige Fragen benötigen ...)

Ich kann den County-Namen nicht aus dem Code holen. Bitte helfen

mein Code:

import pandas as pd 
import numpy as np 
census_df = pd.read_csv('census.csv') 
census_df.head() 
def answer_five(): 
    return census_df.groupby('STNAME').COUNTY.sum().max() 



answer_five() 
+2

Diese Frage enthält keine Beispieldaten oder einen Versuch, die Daten zu filtern, zusätzlich sieht diese Frage wie Hausaufgaben aus, so dass Sie hier mehr Aufwand zeigen müssen – EdChum

+5

Haben Sie gerade Ihre Hausübung kopiert? –

+1

Es scheint die Antwort ist [hier] (http://stackoverflow.com/q/40957458/2901002) – jezrael

Antwort

2

Hier ist die Antwort, die für mich gearbeitet:

def answer_five(): 
    return census_df.groupby(["STNAME"],sort=False).sum()["COUNTY"].idxmax() 

Erster Teil df aggregierte erstellt

census_df.groupby(["STNAME"],sort=False).sum() 

Der zweite Teil führt den col Sie Notwendigkeit

["COUNTY"].idxmax() 

und kehrt Wert-Index mit max entspricht, überprüfen here

+0

Das sieht falsch für mich aus. COUNTY ist nach der [co-est2015-alldata.pdf] [1] der FIPS-Code, der eine Variable int ist. Basierend auf dem Code und der Erklärung, die ich glaube, summieren Sie diese Ints, die> 1 sein können, es ist keine 1-zu-1-Beziehung. Was hier geschehen soll, ist etwas weich von + = 1 wenn SUMLEV = 50. [1]: https://www2.census.gov/programs-surveys/popest/technical-documentation/file-layouts/2010-2015 /co-est2015-alldata.pdf – Eric

-1
def answer_five(): 
    return census_df.groupby('STNAME')['CTYNAME'].count().idxmax() 
+0

Während dieser Code die Frage beantworten kann, würde das Bereitstellen eines zusätzlichen Kontextes hinsichtlich dessen, wie und/oder warum er das Problem löst, den langfristigen Wert der Antwort verbessern. –

0

Es ist der Wechsel von .max() zu idxmax(), die den korrekten Wert für die STNAME eher als eine große ganze Zahl zurückgibt.

0

Nur Korrektur zu Ihrem gesamten Code.

Zuerst, nach der Quelle, SUMLEV von 50 bedeutet die Zeile ist ein County. Zwei Möglichkeiten, dies zu beantworten.

Denkprozess (denke daran, wie in Excel): Sie möchten die Anzahl der "County-Zeilen" in jeder Statusgruppe zählen. Zuerst erstellen Sie die Maske/Bedingung, um alle SUMLEV == 50 ("country rows") auszuwählen. Dann gruppieren Sie sie durch STNAME. Verwenden Sie dann .size(), um die Anzahl der Zeilen für jede Gruppierung zu zählen.

# this is it! 
def answer_five(): 
    mask = (census_df.SUMLEV == 50) 
    max_index = census_df[mask].groupby('STNAME').size().idxmax() 
    return max_index 

# not so elegant 
def answer_five(): 
    census_df['Counts'] = 1 
    mask = (census_df.SUMLEV == 50) 
    max_index = census_df[mask].groupby('STNAME')['Counts'].sum().idxmax() 
    return max_index 

Gern geschehen. https://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.size.html

Verwandte Themen