我有一个像下面的df
>>df
group sub_group max
0 A 1 30.0
1 B 1 300.0
2 B 2 3.0
3 A 2 2.0
我需要将group和sub_group作为atrributes(列)并将max作为row 所以我做了
>>> newdf.set_index(['group','sub_group']).T
group A B A
sub_group 1 1 2 2
max 30.0 300.0 3.0 2.0
这给了我预期的格式
现在我需要将它合并到另一个类似的数据框说
>>df2
group sub_group max
0 C 1 3000.0
1 A 1 4000.0
这样我的合并就会产生
group A B A C
sub_group 1 1 2 2 1
max 30.0 300.0 3.0 2.0 NaN
max 4000.0 NaN NaN NaN 3000.0
基本上在每个新的df我们将值放在适当的标题下,如果有一个新的组或子组,我们添加更大的df。我不确定我的转置方式,然后尝试合并追加是一种好方法
由于这些df是在循环中生成的(循环项目是日期),我希望能够通过循环日期替换第1列(预期的op)中打印的max
。
dates=['20170525', '20170623', '20170726']
for date in dates:
df = pd.read_csv()
答案 0 :(得分:1)
我认为您可以从第一列和第二列首先为index_col
添加参数read_csv
到Multiindex
:
dfs = []
for date in dates:
df = pd.read_csv('name', index_col=[0,1])
dfs.append(df)
#another test df was added
print (df3)
max
group sub_group
D 1 3000.0
E 1 4000.0
然后concat
将它们与参数keys
一起list
,然后按unstack
重新转换并转置:
#dfs = [df,df2,df3]
dates=['20170525', '20170623', '20170726']
df = pd.concat(dfs, keys=dates)['max'].unstack(0).T
print (df)
group A B C D E
sub_group 1 2 1 2 1 1 1
20170525 30.0 2.0 300.0 3.0 NaN NaN NaN
20170623 4000.0 NaN NaN NaN 3000.0 NaN NaN
20170726 NaN NaN NaN NaN NaN 3000.0 4000.0