次の2つのデータフレームがあります
Example1
sku loc flag
122 61 True
123 61 True
113 62 True
122 62 True
123 62 False
122 63 False
301 63 True
Example2
sku dept
113 a
122 b
123 b
301 c
マージを実行するか、またはPandas(またはいずれかPython演算子が最適))を使用して操作を結合して、以下のデータフレームを生成したい。
Example3
sku loc flag dept
122 61 True b
123 61 True b
113 62 True a
122 62 True b
123 62 False b
122 63 False b
301 63 True c
Both
df_Example1.join(df_Example2,lsuffix='_ProdHier')
df_Example1.join(df_Example2,how='outer',lsuffix='_ProdHier')
動作していません。何が間違っていますか?
left
マージを実行します。これは、結合する列としてsku
列を使用します。
In [26]:
df.merge(df1, on='sku', how='left')
Out[26]:
sku loc flag dept
0 122 61 True b
1 122 62 True b
2 122 63 False b
3 123 61 True b
4 123 62 False b
5 113 62 True a
6 301 63 True c
sku
が実際にインデックスである場合、これを行います:
In [28]:
df.merge(df1, left_index=True, right_index=True, how='left')
Out[28]:
loc flag dept
sku
113 62 True a
122 61 True b
122 62 True b
122 63 False b
123 61 True b
123 62 False b
301 63 True c
もう1つの方法は、2番目のdfのインデックスとしてmap
を設定する場合、sku
を使用することです。そのため、実質的にSeriesになり、コードはこれに単純化されます。
In [19]:
df['dept']=df.sku.map(df1.dept)
df
Out[19]:
sku loc flag dept
0 122 61 True b
1 123 61 True b
2 113 62 True a
3 122 62 True b
4 123 62 False b
5 122 63 False b
6 301 63 True c
より一般的なアプリケーションは、次のようにapply
およびlambda
を使用することです。
dict1 = {113:'a',
122:'b',
123:'b',
301:'c'}
df = pd.DataFrame([['1', 113],
['2', 113],
['3', 301],
['4', 122],
['5', 113]], columns=['num', 'num_letter'])
新しいデータフレーム列として追加
**df['letter'] = df['num_letter'].apply(lambda x: dict1[x])**
num num_letter letter
0 1 113 a
1 2 113 a
2 3 301 c
3 4 122 b
4 5 113 a
または、既存の( 'num_letter')列を置き換えます
**df['num_letter'] = df['num_letter'].apply(lambda x: dict1[x])**
num num_letter
0 1 a
1 2 a
2 3 c
3 4 b
4 5 a
私は過去にVBAの非常に多くの手順を常に探していましたが、今ではpython dataframeで多くの作業を節約できます。良いことはvlookupメソッドを書く必要がないことです。
>>> A >>> B
lkey value rkey value
0 foo 1 0 foo 5
1 bar 2 1 bar 6
2 baz 3 2 qux 7
3 foo 4 3 bar 8
>>> A.merge(B, left_on='lkey', right_on='rkey', how='outer')
lkey value_x rkey value_y
0 foo 1 foo 5
1 foo 4 foo 5
2 bar 2 bar 6
3 bar 2 bar 8
4 baz 3 NaN NaN
5 NaN NaN qux 7
以下を試して、左マージを実行することもできます。
import pandas as pd
pd.merge(left, right, left_on = 'key', right_on = 'key', how='left')
outerまたはleftSQLのように動作し、Pythonの組み込みクラスDataFrameにはメソッドのマージは多くの引数を取ります。これは非常に詳細で便利です。