2017-10-24 7 views
0

私は以下の(簡略化された)データを持っています。2つのパンダのデータフレームを比較し、結果に応じて1つ更新します。

import pandas as pd 

a = [['10', '12345', '4'], ['15', '78910', '3'], ['8', '23456', '10']] 
b = [['10', '12345'], ['15', '78910'], ['9', '23456']] 

df_a = pd.DataFrame(a, columns=['id', 'sku', 'quantity ']) 
df_b = pd.DataFrame(b, columns =['id','sku']) 

I 『が両方のデータフレームの列とIは同じにdf_a['quantity']を更新する必要が一致するもののために「idと』 SKUを比較する必要が0 '。

if文のようなものですか?

if (df_a['id'] == df_b['id']) and (df_a['sku'] == df_b['sku']): 
    df_a['quantity']=0 

答えて

1

は、最もエレガントな方法を行う必要がありますが、データフレームの形状が異なる場合はトリックを行います。

a_id_sku = df_a.id + df_a.sku 
b_id_sku = df_b.id + df_b.sku 

df_a.loc[a_id_sku.isin(b_id_sku), 'quantity '] = 0 

これはpandas mergeを使用して別のアプローチ

+1

ええ - それは完全に動作します。ありがとうございました! – FunnyChef

3

これは

df_a.loc[(df_b['id'] == df_a['id']) & (df_a['sku'] == df_b['sku']), 'quantity '] = 0 
+0

私のデータフレームは異なる形状です以外にそれを行うだろうと。 「ValueError:同一ラベルのSeriesオブジェクトのみを比較できる」このように、異なる形状のデータフレームではどうすればよいでしょうか? – FunnyChef

+0

私はこの問題を解決するための別の答えを追加しました –

1

を働いていた場合、私に教えてください:

df_a.loc[pd.merge(df_a, df_b, on = ['id', 'sku'] , how='left', 
    indicator=True)['_merge'] == 'both', 'quantity'] = 0 

df_a 
    id sku quantity 
0 10 12345 0 
1 15 78910 0 
2 8 23456 10 
関連する問題