Pandas: 2回目のマージでサフィックスが無視される

作成日 2015年02月10日  ·  3コメント  ·  ソース: pandas-dev/pandas

複数のデータフレームを連続したマージ操作でマージしようとしていますが、新しくマージされた列名の名前にサフィックスを追加したいと思います。 私のコードの簡略版は次のようになります。

from pandas import *
f0 = DataFrame(columns=['data'], data=[1,2,3], index=['a','b','c'])
f1 = DataFrame(columns=['data'], data=[4,5,6], index=['c','b','a'])
f2 = DataFrame(columns=['data'], data=[7,8,9], index=['a','c','b'])
merged = f0
merged = merged.merge(f1, left_index=True, right_index=True, suffixes=("_0", "_1"))
merged = merged.merge(f2, left_index=True, right_index=True, suffixes=("", "_2"))
print merged.columns

Python2.7のパンダ0.15.2では、これは次のようになります。

Index([u'data_0', u'data_1', u'data'], dtype='object')

私は期待していただろうが

Index([u'data_0', u'data_1', u'data_2'], dtype='object')
Reshaping Usage Question

最も参考になるコメント

あなたはこれが欲しいだけのようですか?

In [45]: pd.concat([f0,f1,f2],axis=1,ignore_index=True)
Out[45]: 
   0  1  2
a  1  6  7
b  2  5  9
c  3  4  8

接尾辞は、最初のマージ後に存在しない重複する列がある場合にのみ適用されます(3番目と比較した場合)

In [46]: merged1 = merged.merge(f1, left_index=True, right_index=True, suffixes=("_0", "_1"))

In [47]: merged1
Out[47]: 
   data_0  data_1
c       3       4
b       2       5
a       1       6

In [48]: merged1.merge(f2, left_index=True, right_index=True, suffixes=("", "_2"))
Out[48]: 
   data_0  data_1  data
a       1       6     7
c       3       4     8
b       2       5     9

全てのコメント3件

あなたはこれが欲しいだけのようですか?

In [45]: pd.concat([f0,f1,f2],axis=1,ignore_index=True)
Out[45]: 
   0  1  2
a  1  6  7
b  2  5  9
c  3  4  8

接尾辞は、最初のマージ後に存在しない重複する列がある場合にのみ適用されます(3番目と比較した場合)

In [46]: merged1 = merged.merge(f1, left_index=True, right_index=True, suffixes=("_0", "_1"))

In [47]: merged1
Out[47]: 
   data_0  data_1
c       3       4
b       2       5
a       1       6

In [48]: merged1.merge(f2, left_index=True, right_index=True, suffixes=("", "_2"))
Out[48]: 
   data_0  data_1  data
a       1       6     7
c       3       4     8
b       2       5     9

説明をありがとう、サフィックスが重複する列名にのみ適用されるという事実を見逃しました。 そして実際、concatソリューションはより単純です。 そして、記録のために:concat(... ignore_index = True)は私が望むものとは正反対ですが、concat(... ignore_index = False)を使用するとうまく機能します。

GR8

通常、列が重複することは望ましくないことに注意してください

マルチレベルの結果が必要な場合があります-keys引数を使用して連結します

このページは役に立ちましたか?
0 / 5 - 0 評価