Как лучше написать одинаковые условия для объединения нескольких наборов данных? - PullRequest
0 голосов
/ 22 апреля 2020

Ниже приведен код, и я просто показываю в качестве примера 2015–2016 годы. Я на самом деле пишу тот же код для набора данных 2015-2019. Это работает для меня, но, как вы можете видеть, оно давно затянуто, так как я должен продолжать повторять коды (до набора данных 2019 года).

Вопрос: 1. Каков будет лучший и эффективный способ написания этого?

df2015 = pd.read_csv('EPL_20152016.csv', parse_dates=['Date'], dayfirst=True,
         usecols=['Date', 'HomeTeam', 'AwayTeam', 'FTHG', 'FTAG', 'FTR', 'BbAv>2.5','BbAv<2.5'])
df2015.rename(columns={'BbAv>2.5': 'Avg>2.5', 'BbAv<2.5': 'Avg<2.5'},inplace=True)
df2015['FTTG'] = df2015['FTHG'] + df2015['FTAG']
df2015['%Avg>2.5'] = 100* (1 / df2015['Avg>2.5'])
df2015['%Avg<2.5'] = 100* (1 / df2015['Avg<2.5'])
df2015['%TotalAvg><2.5'] = df2015['%Avg>2.5'] + df2015['%Avg<2.5']
df2015['%Vig><2.5'] = df2015['%TotalAvg><2.5'] - 100
#df2015 = df2015[['Date', 'HomeTeam', 'AwayTeam', 'FTHG', 'FTAG', 'FTTG', 'FTR','Avg>2.5','Avg<2.5',
df2015 = df2015.reindex(columns=['Date', 'HomeTeam', 'AwayTeam', 'FTHG', 'FTAG', 'FTTG', 'FTR','Avg>2.5','Avg<2.5','%Avg>2.5', '%Avg<2.5', '%TotalAvg><2.5', '%Vig><2.5'])


df2016 = pd.read_csv('EPL_20162017.csv', parse_dates=['Date'], dayfirst=True,
         usecols=['Date', 'HomeTeam', 'AwayTeam', 'FTHG', 'FTAG', 'FTR', 'BbAv>2.5','BbAv<2.5'])
df2016.rename(columns={'BbAv>2.5': 'Avg>2.5', 'BbAv<2.5': 'Avg<2.5'},inplace=True)
df2016['FTTG'] = df2016['FTHG'] + df2016['FTAG']
df2016['%Avg>2.5'] = 100* (1 / df2016['Avg>2.5'])
df2016['%Avg<2.5'] = 100* (1 / df2016['Avg<2.5'])
df2016['%TotalAvg><2.5'] = df2016['%Avg>2.5'] + df2016['%Avg<2.5']
df2016['%Vig><2.5'] = df2016['%TotalAvg><2.5'] - 100
df2016 = df2016.reindex(columns=['Date', 'HomeTeam', 'AwayTeam', 'FTHG', 'FTAG', 'FTTG', 'FTR','Avg>2.5','Avg<2.5','%Avg>2.5', '%Avg<2.5', '%TotalAvg><2.5', '%Vig><2.5'])

Тот же код, что и для наборов данных 2017,2018 и 2019. А потом я использую pd.concat и .set_index

df20152019 = pd.concat([df2015, df2016, df2017, df2018, df2019]).set_index('Date')

1 Ответ

0 голосов
/ 22 апреля 2020

После прочтения ваших файлов с помощью pd.read_csv () в разные кадры данных, вы можете попробовать добавить их в список. Затем создайте для l oop, который перебирает каждый кадр данных в этом списке для выполнения желаемых операций. Например, вы можете попробовать что-то вроде этого:

df_list = [df2015, df2016, df2017, df2018, df2019]

for df in df_list:
    df.rename(columns={'BbAv>2.5': 'Avg>2.5', 'BbAv<2.5': 'Avg<2.5'},inplace=True)
    df['FTTG'] = df['FTHG'] + df['FTAG']
    df['%Avg>2.5'] = 100* (1 / df['Avg>2.5'])
    df['%Avg<2.5'] = 100* (1 / df['Avg<2.5'])
    df['%TotalAvg><2.5'] = df['%Avg>2.5'] + df['%Avg<2.5']
    df['%Vig><2.5'] = df['%TotalAvg><2.5'] - 100
    df = df.reindex(columns=['Date', 'HomeTeam', 'AwayTeam', 'FTHG', 'FTAG','FTTG', 'FTR','Avg>2.5','Avg<2.5','%Avg>2.5', '%Avg<2.5', '%TotalAvg><2.5', '%Vig><2.5'])                                                                          
...