2017-08-31 7 views
-1

pd.concat([df1, df2, df3, df4])のような構文を使って複数のパンダのデータフレームを合計する方法はありますか?私はdf1.sum(df2, fill_value=0)を行うことができることをドキュメントから理解していますが、私は合計する必要があるDataFramesの長いリストを持っており、ループを書くことなくそれを行うことができるかどうか疑問に思っていました。パンダのデータフレームの一覧を

やや関連する質問/答え:Pandas sum multiple dataframes(スタックオーバーフロー)結果がどのように見えるかの

例:

idx1 = pd.MultiIndex.from_tuples([('a', 'A'), ('a', 'B'), ('b', 'A'), ('b', 'D')]) 
idx2 = pd.MultiIndex.from_tuples([('a', 'A'), ('a', 'C'), ('b', 'A'), ('b', 'C')]) 
idx3 = pd.MultiIndex.from_tuples([('a', 'A'), ('a', 'D'), ('b', 'A'), ('b', 'C')]) 

np.random.seed([3,1415]) 
df1 = pd.DataFrame(np.random.randn(4, 1), idx1, ['val']) 
df2 = pd.DataFrame(np.random.randn(4, 1), idx2, ['val']) 
df3 = pd.DataFrame(np.random.randn(4, 1), idx3, ['val']) 

DF1

enter image description here

DF2

enter image description here

DF3

enter image description here

結果は次のようになります。

enter image description here

+1

あなただけの列とインデックスラベルが一致するすべての要素合計でdfを集約をお探しですか?または、各列の合計を合計しますか?希望の結果を投稿してください – EdChum

+0

明快さの欠如について私の謝罪します。より明確なスクリーンショットが追加されました。 @EdChum – blahblahblah

+0

@ Jezraelの答えがあなたの望むことを実行します、私は現在私のものを削除しています – EdChum

答えて

3

使用reduceパラメータfill_value=0と:

np.random.seed(12) 

a = pd.DataFrame(np.random.randint(3, size=(5,3)), columns=list('abc')) 
b = pd.DataFrame(np.random.randint(3, size=(5,2)), columns=list('ab')) 
c = pd.DataFrame(np.random.randint(3, size=(5,2)), columns=list('ac')) 
print(a) 
    a b c 
0 2 1 1 
1 2 0 0 
2 2 1 0 
3 1 1 1 
4 2 2 2 

print(b) 
    a b 
0 0 1 
1 0 0 
2 1 2 
3 1 2 
4 0 1 

print(c) 
    a c 
0 2 0 
1 2 2 
2 2 0 
3 0 2 
4 1 1 

from functools import reduce 

dfs = [a,b, c] 
d = reduce(lambda x, y: x.add(y, fill_value=0), dfs) 
print (d) 
    a b c 
0 4 2.0 1.0 
1 4 0.0 2.0 
2 5 3.0 0.0 
3 2 3.0 3.0 
4 3 3.0 3.0 
+1

これは、解明後にOPが望むことを行います。+1 – EdChum

+1

@EdChum - ありがとう。ところで、あなたは以前私のために大きな先生だったので、すべての答えに非常に感謝します;) – jezrael

+1

ありがとう、私はちょっと今、あなたの質問に答えると、あまり時間がないが面白い質問はまだ私の興味を盛り上げる – EdChum

関連する問題