2016-08-12 7 views
2

Das mag eine etwas wahnsinnige Frage sein ... Ich habe einen einzigen Pandas DF von Artikeln, die ich dann in mehrere DFs aufgeteilt habe, also nur DF enthält die Artikel eines bestimmten Jahres. Ich habe diese Variablen dann in eine Liste namens box_of_years eingetragen.Iterieren durch eine Liste von Pandas DFs, um dann durch jede DF-Zeile zu iterieren

indexed_df = article_db.set_index('date') 
indexed_df = indexed_df.sort_index() 

year_2004 = indexed_df.truncate(before='2004-01-01', after='2004-12-31') 
year_2005 = indexed_df.truncate(before='2005-01-01', after='2005-12-31') 
year_2006 = indexed_df.truncate(before='2006-01-01', after='2006-12-31') 
year_2007 = indexed_df.truncate(before='2007-01-01', after='2007-12-31') 
year_2008 = indexed_df.truncate(before='2008-01-01', after='2008-12-31') 
year_2009 = indexed_df.truncate(before='2009-01-01', after='2009-12-31') 
year_2010 = indexed_df.truncate(before='2010-01-01', after='2010-12-31') 
year_2011 = indexed_df.truncate(before='2011-01-01', after='2011-12-31') 
year_2012 = indexed_df.truncate(before='2012-01-01', after='2012-12-31') 
year_2013 = indexed_df.truncate(before='2013-01-01', after='2013-12-31') 
year_2014 = indexed_df.truncate(before='2014-01-01', after='2014-12-31') 
year_2015 = indexed_df.truncate(before='2015-01-01', after='2015-12-31') 
year_2016 = indexed_df.truncate(before='2016-01-01', after='2016-12-31') 

box_of_years = [year_2004, year_2005, year_2006, year_2007, 
       year_2008, year_2009, year_2010, year_2011, 
       year_2012, year_2013, year_2014, year_2015, 
       year_2016] 

Ich habe verschiedene Funktionen geschrieben tokenize, aufzuräumen und die Token in ein FreqDist Objekt zu konvertieren und wickelte diese in einer einzigen Funktion year_prep() aufgerufen. Das funktioniert gut, wenn ich

year_2006 = year_prep(year_2006) 

tun ... aber gibt es eine Weise, die ich in jedem Jahr variable laufen kann, gelte die Funktion und haben sie die gleiche Variable umwandeln, kurz nur für jedes Jahr, das oben zu wiederholen?

Ich weiß, mich zu wiederholen wäre der einfachste Weg, aber nicht unbedingt der sauberste. Vielleicht habe ich das rückwärts und mache später das Schneiden, aber an diesem Punkt habe ich das Gefühl, dass die Schichten von Listen außer Kontrolle geraten werden, wenn ich von einer Liste von Jahren zu einer Liste von Jahren gehe, die eine Liste von Artikeln enthalten. enthält eine Liste aller Wörter im Artikel.

Antwort

2

ich glaube, Sie groupby von year mit benutzerdefinierten Funktion verwenden können:

import pandas as pd 

start = pd.to_datetime('2004-02-24') 
rng = pd.date_range(start, periods=30, freq='50D') 

df = pd.DataFrame({'Date': rng, 'a':range(30)}) 
#print (df) 

def f(x): 
    print (x) 
    #return year_prep(x) 
    #some custom output 
    return x.a + x.Date.dt.month 

print (df.groupby(df['Date'].dt.year).apply(f)) 
+0

ich diesen 'def f So verwendet (x): print (x)' ' gruppiert = df.groupby (df [ "date"] dt.year) ' ' gruppiert ['clean_text']. apply (f) 'und es funktionierte, den Inhalt der Spalte 'clean_text' in einer gruppierten Liste auszudrucken, so dass es in der Theorie gut aussieht. Jetzt muss ich nur herausfinden, wie Sie bestimmte Gruppen aufrufen, zum Beispiel, wenn ich das Ergebnis der Häufigkeitszählung nur für das Jahr 2008 plotten wollte. –

+0

Und wie es funktioniert? – jezrael

+0

so im Grunde habe ich jetzt meine gruppierte Datenbank, wie zeige ich nur auf die Gruppe 2008? –