将行附加到数据框,如果不存在则添加新列

时间:2017-07-27 10:36:02

标签: python pandas

我有一个像下面的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()

1 个答案:

答案 0 :(得分:1)

我认为您可以从第一列和第二列首先为index_col添加参数read_csvMultiindex

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