2016-06-29 10 views
3

多くの同様の質問がありましたが、これには特に何もありませんでした。パンダのデータフレームのリストをマージ

私はデータフレームのリストを持っており、一意の列(date)を使用してそれらを一緒にマージする必要があります。フィールド名が異なるため、連結がありません。

手動でdf[0].merge(df[1],on='Date').merge(df[3],on='Date)などを使用して各dfを1つずつマージすることはできますが、リスト内のデータフレーム数はユーザーの入力によって異なります。

マージする方法はありますか?リスト内のすべてのデータフレームをまとめて結合するだけですか?または、おそらくinループのためにいくつかそれを行いますか?

私はPython 2.7を使用しています。

答えて

18

あなたはdfListは、データフレームのリストであるreduce機能を使用することができますデモとして

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に変換し、そこから1つだけのデータフレームを作成します。 – PlagTag

+0

ありがとうございます。私がそれを実行すると、私は167428行×85列から0行×29233列になります - それはなぜでしょうか? – Maverick

関連する問題