为多个数据集串联编写相同条件的更好方法是什么?

What will be the better way of writing the same conditions for multiple datasets to concatenate?

下面是代码,我只是以 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')

使用 pd.read_csv() 将文件读取到不同的数据框中后,您可以尝试将它们添加到列表中。然后有一个 for 循环遍历该列表中的每个数据帧以执行所需的操作。例如,您可以尝试这样的操作:

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'])