質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

14188閲覧

Pandasで列を重複させずにconcatさせる方法

kyabaria

総合スコア13

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2019/07/06 07:00

Pandasで同じ列を重複させずに横方向にconcatさせる方法を教えていただきたいです。

python

1import pandas as pd 2df1=pd.DataFrame({'col1': ['a', 'b'],'col2': range(2)}) 3df2=pd.DataFrame({'col2':range(2),'col3':['c','d']}) 4pd.concat([df1,df2],axis=1)

上記のようなコードを実行すると
|col1|col2|col2|col3|
|:--|:--:|||
|a|0|0|c|
|b|1|1|d|

のようなdataframeが得られますが同じ列名であるcol2が重複しないようにしたいです。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

最善かわかりませんが、stackoverflowで次のようなコードを見つけました。

python

1df1=pd.DataFrame({'person': ['F2001','F2001','F2001','F2002'],'label':[0,0,1,1]}) 2df2=pd.DataFrame({'person': ['F2001','F2001','F2001','F2002'],'label':[0,0,1,1]}) 3df_test=pd.concat([df1,df2],axis=1) 4df_test=df_test.loc[:,~df_test.columns.duplicated()]

投稿2019/07/08 00:42

kyabaria

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

concatじゃなくて、mergeでいけます。

python

1import pandas as pd 2df1=pd.DataFrame({'col1': ['a', 'b'],'col2': range(2)}) 3df2=pd.DataFrame({'col2':range(2),'col3':['c','d']}) 4pd.merge(df1, df2)

投稿2019/07/06 07:41

waku_nagoya

総合スコア200

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kyabaria

2019/07/07 01:27

回答いただきありがとうございます。一点お聞きしたいことがあります。上記の例に対しては教えていただいた方法で求めたいdataframeが出力されたのですが、下記のような例に対してpd.merge(df1,df2)を実行すると df1=pd.DataFrame({'person': ['F2001','F2001','F2001','F2002'],'label':[0,0,1,1]}) df2=pd.DataFrame({'person': ['F2001','F2001','F2001','F2002'],'label':[0,0,1,1]}) person label F2001 0 F2001 0 F2001 0 F2001 0 F2001 1 F2002 1 のように[F2001 0]の組み合わせが4つ出力されてしまうのですが、解決方法がわからずにいます。元のdataframeと同じように組み合わせの数が2つ出力されてほしいのですが方法を教えていただけないでしょうか。よろしくお願いします。
waku_nagoya

2019/07/07 04:35

pd.merge(df1.T,df2.T).T と一回、横にしてあげたらどうでしょう。
magichan

2019/07/07 23:36

横から失礼します。 pd.concat(axis=1) は2つ以上のデータフレームをIndex値が同じ行同士を単純に横結合する関数、pd.merge() は2つのデータフレームで共通するのカラムの値をもとに(共通する値)同士で結合する関数であり、挙動が全く違う関数です。 ですので、そのへんを理解した上で問題解決にあたる必要があるのではないでしょうかね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問