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

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

新規登録して質問してみよう
ただいま回答率
85.35%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

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

Q&A

解決済

1回答

648閲覧

【python】2つのデータフレームを組み合わせたい

lmk

総合スコア16

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

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

0グッド

0クリップ

投稿2021/12/06 03:17

実現したいこと

vscodeを用いてpythonでプログラムを書いています。

csvファイルをデータフレームにし、
2つのデータフレームを列ごとに順列になるよう組み合わせたいと考えています。具体的には、

表1
||name1|name1'|value1|
|:--|:--:|--:|
|0|A|a|1|
|1|A|b|2|
|2|A|c|3|

表2
||name2|name2'|value2|
|:--|:--:|--:|
|3|B|d|4|
|4|B|e|5|
|5|B|f|6|

といった表があった場合、
name1が順列になるように各dataframeを列ごとに組み合わせたいです

||name1|name1'|value1|name2|name2'|value2|(表1と2の組み合わせ方(列番号))
|:--|:--:|:--:|--:|
||A|a|1|B|d|4|0-3|
||A|a|1|B|e|5|0-4|
||A|a|1|B|f|6|0-5|
||A|b|2|B|d|4|1-3|

発生している問題

列ごとに処理していこうと考えているのですが、
pd.concatを用いるとキーが必要であるため、NaN値が出てきてしまいます…

||name1|name1'|value1|name2|name2'|value2|
|:--|:--:|:--:|--:|
||A|a|1|NaN|NaN|NaN|
||NaN|NaN|NaN|B|d|4|

該当のソースコード

df_1 = pd.read_csv('table1.csv') df_2 = pd.read_csv('table2.csv') df = pd.concat([df_a.iloc[[1],:],df_2.iloc[[1],:]],axis=1)

初歩的な質問で申し訳ありません。ご教示のほどよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Cross join します。

python

1dfx = pd.merge(df_1, df_2, how='cross') 2dfx['combination'] = ( 3 pd.merge(df_1.index.to_frame(), df_2.index.to_frame(), how='cross') 4 .apply(lambda x: f'{x[0]}-{x[1]}', axis=1)) 5 6print(dfx) 7# 8 name1 name1' value1 name2 name2' value2 combination 90 A a 1 B d 4 0-3 101 A a 1 B e 5 0-4 112 A a 1 B f 6 0-5 123 A b 2 B d 4 1-3 134 A b 2 B e 5 1-4 145 A b 2 B f 6 1-5 156 A c 3 B d 4 2-3 167 A c 3 B e 5 2-4 178 A c 3 B f 6 2-5

投稿2021/12/06 03:55

melian

総合スコア20655

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

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

lmk

2021/12/06 04:54

ご回答いただき誠にありがとうございます。 実行を試みたのですが、 pandas.errors.MergeError: No common columns to perform merge on. Merge options: left_on=None, right_on=None, left_index=False, right_index=False というmergeのエラーが出てしまいました… how='cross'のために一時的にキーを何か設定する必要があるのでしょうか?
melian

2021/12/06 04:59

こちらで使用している CSV ファイルは以下の様になっています。そちらでお使いのものと内容は同じでしょうか? table1.csv name1,name1',value1 0,A,a,1 1,A,b,2 2,A,c,3 table2.csv name2,name2',value2 3,B,d,4 4,B,e,5 5,B,f,6
lmk

2021/12/06 05:09

csvの内容は同様となっております。 不備があったようで、打ち直したところmergeのエラーは消えたのですが、 in _get_join_indexers join_func = _join_functions[how] KeyError: 'cross' というエラーが出ております…
melian

2021/12/06 05:22

Pandas のバージョンはどうなっていますでしょうか? こちらでは 1.3.4 を使っています。
lmk

2021/12/06 05:35

ご指摘ありがとうございます。 pandasのバージョンが古かったです… アップデートして試したところ、実行できました! 丁寧にご教示いただき、誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問