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

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

新規登録して質問してみよう
ただいま回答率
85.46%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python

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

pandas

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

Q&A

解決済

3回答

1575閲覧

pandasで同じidのものを結合したい

shosinnshadesu

総合スコア93

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python

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

pandas

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

0グッド

0クリップ

投稿2021/10/30 22:54

下のようにファイルが2つあったとして、idが同じものを同じものとしてしてproductを下のファイルに結合したいです。
どのようにしたら良いのでしょうか。

id product

1 ice
2 fruit
3 meat
1 ice

id. place
1 4
2 3
3 2
1 4

このようにしたいです。
product place
ice 4
fruit 3
meat 2
ice 4

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

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

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

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

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

takutakuya

2021/10/30 23:39

id=1が2行ありますが、同じidは複数行存在するのでしょうか? あと、少しは調べて、何かしらコードを書いてみないと永遠に初心者ですよ?
guest

回答3

0

回答

pandasのconcat関数を使います。

(前提)
・1つ目の表をdf1、2つ目の表をdf2、結合した表をdfとします。
・コメント行は直前のprint文の結果を表したものです。

import pandas as pd df1 = pd.DataFrame([[1,"ice"],[2,"fruit"],[3,"meat"],[1,"ice"]],columns=["id","product"],index=[0,1,2,3]) print(df1) # id product # 0 1 ice # 1 2 fruit # 2 3 meat # 3 1 ice df2 = pd.DataFrame([[1,4],[2,3],[3,2],[1,4]],columns=["id","place"],index=[0,1,2,3]) print(df2) # id product # 0 1 ice # 1 2 fruit # 2 3 meat # 3 1 ice df = pd.concat([df1, df2], axis=1).drop(columns="id") print(df) # product place # 0 ice 4 # 1 fruit 3 # 2 meat 2 # 3 ice 4

 

解説

df = pd.concat([df1, df2], axis=1).drop(columns="id")

・concat:結合する
・axis=1:行方向(横方向)へ結合する   ※列方向(縦方向)とする場合は axis=0
・drop(columns="id"):id列を削除する
*単純にconcatしただけでは、下記のようにid列が2列できます。これをdropで削除しています。

# id product id place # 0 1 ice 1 4 # 1 2 fruit 2 3 # 2 3 meat 3 2 # 3 1 ice 1 4

投稿2021/10/31 00:10

_whitecat_22

総合スコア1305

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

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

0

ベストアンサー

ファイルからDetaFrameの読み込みと書き出しはできるでしょうから、DetaFrameの処理部分を書いておきます。

Python

1>>> print(df1) 2 id product 30 1 ice 41 2 fruit 52 3 meat 63 1 ice 7>>> print(df2) 8 id place 90 1 4 101 2 3 112 3 2 123 1 4 13>>> print(pd.merge(df1,df2.drop_duplicates(), how='left').drop('id', axis=1)) 14 product place 150 ice 4 161 fruit 3 172 meat 2 183 ice 4

投稿2021/10/30 23:44

ppaul

総合スコア24666

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

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

0

product テーブルの内容を辞書化して place テーブルの id を置き換える方法です。

python

1import pandas as pd 2 3df1 = pd.DataFrame({'id': [1, 2, 3, 1], 'product': ['ice', 'fruit', 'meat', 'ice']}) 4df2 = pd.DataFrame({'id': [1, 2, 3, 1], 'place': [4, 3, 2, 4]}) 5 6dfx = df2.replace({'id': dict(df1.values)}).rename(columns={'id': 'product'}) 7print(dfx.to_markdown(index=False))
productplace
ice4
fruit3
meat2
ice4

投稿2021/10/31 02:09

melian

総合スコア19865

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問