合并DataFrame及其总数

时间:2019-05-12 22:56:32

标签: python pandas dataframe merge

我有14个数据框。

它们都有一个索引和1个称为“总计”的列

以下是1个DataFrame的示例: https://i.gyazo.com/8b31f92a469e31df89a29e4588427362.png

索引是“ Res Area” 列为“总计”

所以我要做的是将它们全部合并到1个数据帧中,其中索引将是 df的名称和“总计”列以比较所有这些DF。

我尝试将df放入字典中,键为df的名称,将其前十名的合计值相加在一起,但它不起作用

我尝试将df放入字典中,键为df的名称,将其前十名的合计值相加在一起,但它不起作用

df =  pd.DataFrame({'Res Area': resarea_df.Total[:10].sum(), 'Year Built': yearbuilt_df.Total[:10].sum(),'Retail Area': retailarea_df.Total[:10].sum()})

我看到一条错误消息:

如果使用所有标量值,则必须传递索引

我只想将所有df合并为1个df,以查看每个df的前10个总计之和,然后将它们相互比较,将它们绘制在图上

1 个答案:

答案 0 :(得分:1)

您为DataFrame调用了错误的构造函数。使用标量值字典(其中键成为索引),您要使用.from_dict构造函数:

import pandas as pd

data= {'data1': 1, 'data2': 2, 'data3': 15}
pd.DataFrame.from_dict(data, orient='index', columns=['Total'])
#       Total
#data1      1
#data2      2
#data3     15

为解释您所遇到的问题,在使用pd.DataFrame和字典构造DataFrame时,默认设置是将DataFrame的键设置为列。通常,传递的字典的值类似于数组,这允许pandas确定要创建多少行。但是,使用所有标量值并且没有索引,无法知道它需要多少行。

data= {'data1': 1, 'data2': 2, 'data3': 15}
pd.DataFrame(data)
#ValueError: If using all scalar values, you must pass an index

要正确执行此操作,您需要指定一个索引:

pd.DataFrame(data, index=[0])
#   data1  data2  data3
#0      1      2     15

或者使至少一个类似数据数组的值:

data2 = {'data1': 1, 'data2': 2, 'data3': [15]}
pd.DataFrame(data2)
#   data1  data2  data3
#0      1      2     15