Pandas 使用多个数据帧创建嵌套数据帧

Pandas 使用多个数据帧创建嵌套数据帧,pandas,dataframe,nested,Pandas,Dataframe,Nested,我有多个数据帧,以下是其中的两个: print(df1) Date A B C 2019-10-01 00:00:00 2 3 1 2019-10-01 01:00:00 5 1 6 2019-10-01 02:00:00 8 2 4 2019-10-01 03:00:00 3 6 5 print(df2) Date A B C 2019-10-01 00:00:00

我有多个数据帧,以下是其中的两个:

print(df1)

Date                 A  B  C  
2019-10-01 00:00:00  2  3  1  
2019-10-01 01:00:00  5  1  6  
2019-10-01 02:00:00  8  2  4  
2019-10-01 03:00:00  3  6  5  



print(df2)

Date                 A  B  C  
2019-10-01 00:00:00  9  4  2  
2019-10-01 01:00:00  3  2  4  
2019-10-01 02:00:00  6  5  2  
2019-10-01 03:00:00  3  6  5  

它们都有相同的索引和列。我想创建如下数据帧:

    Date                df1  df2
A   2019-10-01 00:00:00   2    9 
    2019-10-01 01:00:00   5    3  
    2019-10-01 02:00:00   8    6
    2019-10-01 03:00:00   3    3  
B   2019-10-01 00:00:00   3    4  
    2019-10-01 01:00:00   1    2  
    2019-10-01 02:00:00   2    5  
    2019-10-01 03:00:00   6    6  
C   2019-10-01 00:00:00   1    2  
    2019-10-01 01:00:00   6    4  
    2019-10-01 02:00:00   4    2  
    2019-10-01 03:00:00   5    5

我必须将这个过程应用于30个数据帧(它们的索引和列是相同的),所以我想编写一个for循环来实现这个数据帧。我如何才能做到这一点?

通过使用重塑
数据框列表的每个数据框,然后使用lambda函数最后更改列名:

dfs = [df1,df2]
df = (pd.concat([x.set_index('Date').unstack() for x in dfs], axis=1)
       .rename(columns=lambda x: f'df{x+1}'))
print (df)
                       df1  df2
  Date                         
A 2019-10-01 00:00:00    2    9
  2019-10-01 01:00:00    5    3
  2019-10-01 02:00:00    8    6
  2019-10-01 03:00:00    3    3
B 2019-10-01 00:00:00    3    4
  2019-10-01 01:00:00    1    2
  2019-10-01 02:00:00    2    5
  2019-10-01 03:00:00    6    6
C 2019-10-01 00:00:00    1    2
  2019-10-01 01:00:00    6    4
  2019-10-01 02:00:00    4    2
  2019-10-01 03:00:00    5    5
如果希望在final
DataFrame
中使用一些自定义列名称,请创建与
dfs
长度相同大小的列表,并添加参数

dfs = [df1,df2]
names = ['col1','col2']

df = pd.concat([x.set_index('Date').unstack() for x in dfs], keys=names, axis=1)
print (df)
                       col1  col2
  Date                           
A 2019-10-01 00:00:00     2     9
  2019-10-01 01:00:00     5     3
  2019-10-01 02:00:00     8     6
  2019-10-01 03:00:00     3     3
B 2019-10-01 00:00:00     3     4
  2019-10-01 01:00:00     1     2
  2019-10-01 02:00:00     2     5
  2019-10-01 03:00:00     6     6
C 2019-10-01 00:00:00     1     2
  2019-10-01 01:00:00     6     4
  2019-10-01 02:00:00     4     2
  2019-10-01 03:00:00     5     5

如果列名不同怎么办?我的意思是dfs=[Buying,Selling,Amount,…]类似的东西。@JuniorESE-你认为每个数据帧有不同吗?不,所有数据帧都有相同的列,但只是它们的名称不同。此外,列名应该是df的名称,而不是col1和col2。@JUnitorese-不幸的是,在python中有必要像在列表中的第二个解决方案中那样指定此列名,这里称为
names
我想将日期列重采样为每月一次。失踪月份将为零。我该怎么做?@耶斯雷尔