Преобразование Matlab Script в Python. - PullRequest
0 голосов
/ 02 сентября 2018

Мне нужна помощь в преобразовании сценария Matlab в Python. Скрипт переупорядочивает данные от календарного года до года воды. Я хотел бы научиться делать что-то подобное с Python и Pandas и использовать DataFrame. Спасибо за ваше время.

% Beginning of script code

% Initialize the annualflow matrix to have 10 rows and 2 columns (date and
% discharge)
annualflow = zeros(10, 2);

% Initialize counter
yearcount = 1;
for year= 2003:2012
% Find the serial date at the start and end of each water year.  
% Water years start on 10/1 of the previous year and end on 9/30
    startdate = datenum(year-1,10,01);
    enddate = datenum(year,09,30);

    % Assign the water year number to column 1 
    annualflow(yearcount,1) = year;

% Loop through the entire daily data array.  If the date is within the
% current water year, add the daily discharge to the cumulative sum.
numdays = 0;
for i=1:size(WabashRiver)
    if(WabashRiver(i,1) >= startdate && WabashRiver(i,1) <= enddate)
       % Count the number of days in each year.
        numdays = numdays + 1;

       % Find the cumulative sum of discharge for this year.
        annualflow(yearcount,2) = annualflow(yearcount,2) + WabashRiver(i,2);
       end
   end

 % Divide by the number of days in the year to get a daily discharge
 % rate.
 annualflow(yearcount,2) = annualflow(yearcount,2)/numdays;

 % Increase the row index, this will take on values 1 - 10. 
 yearcount = yearcount + 1;
end

% End of script code

1 Ответ

0 голосов
/ 03 сентября 2018

Блокнот Jupyter

Использование данных из USGS 03335500 РЕКА ВАБАШ В ЛАФАЙЕТЕ, IN

Даты: 2001-10-01 - 2017-09-31

Вот код:

import pandas as pd

# Load the data
df = pd.read_csv('WabashRiver_Flow.csv', parse_dates=['datetime'])

df = df.dropna()

print(df.info())

print(df['discharge_cfps'].describe())

print(df.head())


# Write a function to determine the correct water year
def calc_water_year(date):
    date = pd.to_datetime(date)
    if 10 <= date.month <= 12:
        water_year = date.year + 1
        return water_year
    else:
        return date.year

def calc_water_year_apply(df):
    df['water_year'] = df.datetime.apply(lambda row: calc_water_year(row))

calc_water_year_apply(df)

print(df.head())


# Calculate the mean
annual_mean_discharge_rate = df.groupby('water_year')[['discharge_cfps']].mean()

print(annual_mean_discharge_rate)

Результаты ежегодной ставки расхода:

    discharge_cfps
water_year  
2002    9379.829589
2003    8678.468324
2004    8562.505005
2005    8928.776256
2006    6710.805312
2007    10331.564789
2008    10626.336623
2009    8972.046607
2010    5298.569557
2011    10519.540869
2012    9013.624424
2013    9007.924205
2014    9079.561658
2015    12267.393776
2016    6445.875810
2017    10240.721464
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...