Слияние фреймов данных и их итогов - PullRequest
0 голосов
/ 13 мая 2019

У меня есть 14 DataFrames.

Все они имеют индекс и 1 столбец с именем «Всего» * ​​1003 *

Вот пример 1 DataFrame: https://i.gyazo.com/8b31f92a469e31df89a29e4588427362.png

index: «Res Area». Столбец «Total»

Итак, я хочу объединить их все в 1 кадр данных, где index будет именем df и столбцом «Total», чтобы сравнить всеиз этих DF.

Я попытался поместить DF в словарь, ключом которого было Имя df и значение его Сумма 10 лучших, сложенных вместе, но это не работает

Ive попробовалпомещая df в словарь, ключом которого является имя df и значение его Total из 10 лучших, сложенных вместе, но это не работает

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

Я получаю сообщение об ошибке:

Если вы используете все скалярные значения, вы должны передать индекс

Я просто хочу объединить все dfs в 1 df, чтобы увидеть все 10 лучших значений dfs, суммируемых вместе в сравнении друг с другом, которые я нанесу на график

1 Ответ

1 голос
/ 13 мая 2019

Вы вызываете неправильный конструктор для вашего 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

Чтобы объяснить возникшую проблему при создании DataFrame с помощью pd.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...