2016-06-29 4 views
3

Было много подобных вопросов, но конкретно это не было.Объединить список данных для фотокамер pandas

У меня есть список фреймов данных, и мне нужно объединить их вместе, используя уникальный столбец (date). Имена полей разные, поэтому concat is out.

Я могу вручную использовать df[0].merge(df[1],on='Date').merge(df[3],on='Date) и т. Д., Чтобы объединить каждый df один за другим, но проблема в том, что количество кадров данных в списке отличается от пользовательского ввода.

Есть ли способ слияния, который просто объединяет все кадры данных в списке за один раз? Или, может быть, некоторые из них в цикле?

Я использую Python 2.7.

ответ

18

Вы можете использовать функцию reduce где dfList ваш список фреймов данных:

import pandas as pd 
reduce(lambda x, y: pd.merge(x, y, on = 'Date'), dfList) 

В демо:

df = pd.DataFrame({'Date': [1,2,3,4], 'Value': [2,3,3,4]}) 
dfList = [df, df, df] 
dfList 

# [ Date Value 
# 0  1  2 
# 1  2  3 
# 2  3  3 
# 3  4  4, Date Value 
# 0  1  2 
# 1  2  3 
# 2  3  3 
# 3  4  4, Date Value 
# 0  1  2 
# 1  2  3 
# 2  3  3 
# 3  4  4] 

reduce(lambda x, y: pd.merge(x, y, on = 'Date'), dfList) 
# Date Value_x Value_y Value 
# 0 1  2  2  2 
# 1 2  3  3  3 
# 2 3  3  3  3 
# 3 4  4  4  4 
+1

вау ... спасибо! Я никогда не понимаю, что такое лямбда. Похоже, что пора его читать! – Jake

+0

Просто упомянуть об этом. map() или listcomprehension также будет работать. Для скорости я сначала преобразовал бы все в dict и создавал бы только один фрейм данных. – PlagTag

+0

Спасибо за это. Когда я запускаю его, я перехожу из 167428 строк х 85 столбцов в 0 строк × 29233 столбцов - любые идеи, почему это может быть? – Maverick

Смежные вопросы