Tříští datový rámec do více rámců by termíny Python

hlasů
0

Plně chápu, existuje několik verzí tohoto otázek venku, ale nikdo Zdá se, že dostat se na jádro mého problému. Mám pandy datovém se zhruba 72.000 řádků od roku 2015 do současnosti. Já používám výpočet, který vyhledá nejvlivnějších slova pro danou sadu textu (tf_idf). Tento výpočet nebere v úvahu dobu, takže musím zlomit můj hlavní datovém dolů do časově omezené segmenty, nejlépe každých 15 až 30 dní (nebo n dnů ve skutečnosti, ne týden / měsíc), pak spustit výpočet na každém okamžiku-segmentový datový rámec, aby bylo vidět a pozemku, jaká slova přijít více a méně v průběhu času.

Byl jsem schopen vybudovat součást tohoto na to semi-ručně pomocí následujících možností:

def dateRange():
    start = input(Enter a start date (MM-DD-YYYY) or '30' for last 30 days: )
    if (start != '30'):
        datetime.strptime(start, '%m-%d-%Y')
        end = input(Enter a end date (MM-DD-YYYY): )
        datetime.strptime(end, '%m-%d-%Y')
        dataTime = data[(data['STATUSDATE'] > start) & (data['STATUSDATE'] <= end)]
    else:
        dataTime = data[data.STATUSDATE > datetime.now() - pd.to_timedelta('30day')]
    return dataTime

dataTime = dateRange()
dataTime2 = dateRange()

def calcForDateRange(dateRangeFrame):
    ##### LONG FUNCTION####
    return word and number

calcForDateRange(dataTime)
calcForDateRange(dataTime2)

To funguje - ale musím ručně vytvořit 2 termíny, které se očekává, jak jsem vytvořil to jako test. Jak mohu rozdělit datovém v krocích a spustit výpočet pro každého datového rámce?

dictsjsou údajně způsob, jak to udělat. Zkusil jsem:

dict_of_dfs = {}
for n, g in data.groupby(data['STATUSDATE']):
    dict_of_dfs[n] = g

for frame in dict_of_dfs:
    calcForDateRange(frame)

Výsledkem dict byl 2015-01-02: Dataframebez rámečku. Jak mohu rozčlenit tento systém do 100 nebo tak DataFrames provozovat svou funkci zapnout?

Také nemám plně pochopit, jak rozebrat ['STATUSDATE']podle počtu dnů konkrétně?

Rád bych, aby se zabránilo iterace, stejně jako je to možné, ale vím, že asi budu muset someehere.

Děkuju

Položena 02/12/2019 v 23:52
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
1

Dejme tomu, že máte datový rámec takto:

date = pd.date_range(start='1/1/2018', end='31/12/2018', normalize=True)
x = np.random.randint(0, 1000, size=365)

df = pd.DataFrame(x, columns = ["X"])
df['Date'] = date
df.head()

výstup :

    X   Date
0   328 2018-01-01
1   188 2018-01-02
2   709 2018-01-03
3   259 2018-01-04
4   131 2018-01-05

Takže tato data rám má 365 řádků, jeden pro každý den v roce.

Nyní, pokud chcete seskupit tato data do intervalu 20 dní a přiřadit každé skupině na dict, můžete provést následující kroky

df_dict = {}
for k,v in df.groupby(pd.Grouper(key="Date", freq='20D')):
    df_dict[k.strftime("%Y-%m-%d")] = pd.DataFrame(v)
print(df_dict)
Odpovězeno 03/12/2019 v 00:17
zdroj uživatelem

hlasů
1

Jak se o něco takového. Vytváří slovník neprázdných DataFrames zapisují k prvnímu dni tohoto období.

import datetime as dt

start = '12-31-2017'
interval_days = 30

start_date = pd.Timestamp(start)
end_date = pd.Timestamp(dt.date.today() + dt.timedelta(days=1))
dates = pd.date_range(start=start_date, end=end_date, freq=f'{interval_days}d')

sub_dfs = {d1.strftime('%Y%m%d'): df.loc[df.dates.ge(d1) & df.dates.lt(d2)]
           for d1, d2 in zip(dates, dates[1:])}
# Remove empty dataframes.
sub_dfs = {k: v for k, v in sub_dfs.items() if not v.empty}
Odpovězeno 03/12/2019 v 00:24
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more