使代码更好 - 列出动态DF附加

时间:2018-03-09 22:52:40

标签: python list pandas

我正在尝试创建一个Df来组合对的时间体积。因此,我尝试了下面的代码。它正在工作,但是,想知道一种更动态地处理列表附加到DF的方法。任何帮助将不胜感激..提前致谢!

     time = []

     for i in (dfeuh,dfguh,dfuch,dfujh,dfauh,
               dfnuh,dfejh,dfegh,dfgjh,dfuchh,dfgoldh,dfdaxh):

         a = i.groupby(by='Time')['Ch Pip H'].mean()
                                  .sort_values(ascending=False).head(1)
         time.append(a)

    df = pd.DataFrame(time[0])
    df1 = pd.DataFrame(time[1])
    df2 = pd.DataFrame(time[2]) 
    df3 = pd.DataFrame(time[3])
    df4 = pd.DataFrame(time[4])
    df5 = pd.DataFrame(time[5])
    df6 = pd.DataFrame(time[6])
    df7 = pd.DataFrame(time[7])
    df8 = pd.DataFrame(time[8])
    df9 = pd.DataFrame(time[9])
    df10 = pd.DataFrame(time[10])
    df11= pd.DataFrame(time[11]) 
    dfto = pd.concat([df,df1,df2,df3,df4,df5,df6,df7,df8, 
                      df9,df10,df11],ignore_index=False)
    pairs = ['EU','GU','UC','UJ','AU','NU','EJ',
             'EG','GJ','UCH','GOLD','DAX']
    dfto['Ch Pip H'] = pairs
    dfto = dfto.reset_index()
    dfto.set_index(['Ch Pip H'],inplace=True)
    col = ['Time Vol Max']
    dfto.columns = col

2 个答案:

答案 0 :(得分:1)

我建议替换它:

df = pd.DataFrame(time[0])
df1 = pd.DataFrame(time[1])
df2 = pd.DataFrame(time[2]) 
df3 = pd.DataFrame(time[3])
df4 = pd.DataFrame(time[4])
df5 = pd.DataFrame(time[5])
df6 = pd.DataFrame(time[6])
df7 = pd.DataFrame(time[7])
df8 = pd.DataFrame(time[8])
df9 = pd.DataFrame(time[9])
df10 = pd.DataFrame(time[10])
df11= pd.DataFrame(time[11]) 
dfto = pd.concat([df,df1,df2,df3,df4,df5,df6,df7,df8, 
                  df9,df10,df11],ignore_index=False)

有了这个:

dfs = []
for i in range(12):
    dfs.append(pd.DataFrame(time[i])

dfto = pd.concat(dfs,ignore_index=False)

根据您的数据的具体情况,您可以通过某种方式无需使用循环即可完成所需的操作 - 在使用Pandas时,循环通常是最后的手段,但有可用的信息我至少可以说这与现有代码的作用相同,但是更加简洁和适应性强。

编辑添加上述前三行可以进一步简化为:

dfs = [pd.DataFrame(time[i]) for i in range(12)]

答案 1 :(得分:0)

根据我的理解,您想要一种更简洁的方法来创建数据框?

在这种情况下,您可以使用高阶函数map,并将行数减少为1!

data_frames = map(pd.DataFrame, time)
dfto = pd.concat(data_frames, ignore_index=False)

这将为您提供数据框列表,您可以删除所有单独创建DataFrame的行。现在data_frames应该包含所有这些但只用一行实现。

高阶函数map将一个函数作为第一个参数,在本例中为pd.DataFrame(),并将第二个参数作为一个项目序列,在本例中为列表time ,并将该函数应用于序列的每个元素,并返回一个列表,其中包含将函数应用于序列的每个元素的结果。