2017-01-17 2 views
0

Я ищу, чтобы присоединиться к двум фреймам данных, используя pandas в столбцах «Дата». Обычно я использую df2 = pd.concat ([df, df1], axis = 1), однако по какой-то причине это не работает.Взаимодействие/Объединение двух разных Dataframes Pandas

В этом примере я извлекаю данные из файла sql, создавая новый столбец «Дата», который объединяет мои столбцы года и месяца, а затем поворачивается. В то время как я пытаюсь объединить два кадра данных, блок данных отображается бок о бок вместо объединения.

Что приходит: Дата Графа Кошки Дата Графа Собаки

То, что я хочу, чтобы придумать:

Дата Графа Кошки Графа Собаки

Любые идеи? Моя другая проблема заключается в том, что я стараюсь, чтобы столбцы Date записывали excel как строку, а не функцию datetime. Пожалуйста, держите это в голове, думая о решении.

Вот мой код:

executeScriptsFromFile('cats.sql') 
df = pd.DataFrame(cursor.fetchall()) 
df.columns = [rec[0] for rec in cursor.description] 
monthend = {'Q1':'3/31','Q2':'6/30','Q3':'9/30','Q4':'12/31'} 
df['Date']=df['QUARTER'].map(monthend)+'/'+ df['YEAR'] 
df['Date'] = pd.to_datetime(df['Date']) 
df10= df.pivot_table(['Breed'], ['Date'], aggfunc=np.sum,fill_value=0) 
df10.reset_index(drop=False, inplace=True) 
df10.reindex_axis(['Breed', 'Count of Cats'], axis=1) 
df10.columns = ('Breed', 'Count of Cats') 


executeScriptsFromFile('dogs.sql') 
df = pd.DataFrame(cursor.fetchall()) 
df.columns = [rec[0] for rec in cursor.description] 
monthend = {'Q1':'3/31','Q2':'6/30','Q3':'9/30','Q4':'12/31'} 
df['Date']=df['QUARTER'].map(monthend)+'/'+ df['YEAR'] 
df['Date'] = pd.to_datetime(df['Date']) 
df11= df.pivot_table(['Breed'], ['Date'], aggfunc=np.sum,fill_value=0) 
df11.reset_index(drop=False, inplace=True) 
df11.reindex_axis(['Breed', 'Count of Dogs'], axis=1) 
df11.columns = ('Breed', 'Count of Dogs') 
df11a= df11.round(0) 

df12= pd.concat([df10, df11a],axis=1) 
+1

Вы можете добавить некоторые образцы ваших dataframes? Также существует некоторая разница в типе 'df10.index' и' d11.index'? Потому что это должно сработать. – jezrael

+1

Я не уверен, но, похоже, вам нужно удалить 'df10.reset_index (drop = False, inplace = True)' и 'df11.reset_index (drop = False, inplace = True)', проверьте его. – jezrael

+0

Или, возможно, нужно удалить только один уровень, нужно «date» как индекс в обоих кадрах данных до 'concat' – jezrael

ответ

1

Я думаю, вы должны удалить код:

df10.reset_index(drop=False, inplace=True) 
df11.reset_index(drop=False, inplace=True) 

, потому что уровень необходимости date в index для concat по date.

Кроме того, для индекса Преобразовать в string использования:

df.inde = df.index.astype(str)