我正在尝试创建一个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
答案 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
,并将该函数应用于序列的每个元素,并返回一个列表,其中包含将函数应用于序列的每个元素的结果。