下のようにファイルが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ページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/30 23:51
回答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
総合スコア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
総合スコア24670
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
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))
product | place |
---|---|
ice | 4 |
fruit | 3 |
meat | 2 |
ice | 4 |
投稿2021/10/31 02:09
総合スコア20655
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。