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
如果希望在finalDataFrame
中使用一些自定义列名称,请创建与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
我想将日期列重采样为每月一次。失踪月份将为零。我该怎么做?@耶斯雷尔