2016-10-27 12 views
0
+--- -----+------------+-------------+ 
|master_id| product_id |products  | 
+---------+------------+-------------+ 
| 0  | 123  | home  | 
| 12  | 234  | office  | 
| 15  | 456  | home  | 
| 0  | 678  | office  | 
| 25  | 890  | home  | 
| 0  | 145  | office  | 
+---+-----------------+--------------+ 

私は、このテーブル(表示された行の一部のみ、以上の1000行)、私は、ロジックを記述したいを持っているように、その都度ロジックは、MySQLのpythonで列の値を置き換えます

MASTER_ID = 0、master_id = product_id

私はそれをpandasデータフレームに移動しました。 これはどうやってこの論理を書くのですか

答えて

1

パンダはこれには必要ありません。データベースを介して直接行うことができます。

あなただけ違ったレコードを表示したい場合は

SELECT CASE master_id WHEN 0 THEN product_id ELSE master_id END AS master_id, 
     product_id, 
     products 
FROM mytable 

あなたが実際にデータベースを更新する場合は、それも簡単です:

UPDATE mytable 
SET master_id = product_id 
WHERE master_id = 0 
+0

私はselect distinct cases(...)を使用することができますか? – Shubham

+0

@SRingneはい、もちろん – Mureinik

+0

私はselect distinctを使用できますか? 私は製品の数を見つけたい 私のクエリ SELECT DISTINCT CASE master_id WHEN 0 THEN product_id ELSE master_id END AS master_id、count(別名(product_id))をmytableグループのtotal_productsとしてマストer_id – Shubham

1

これはあなたが欲しいものですか?

select (case when master_id = 0 then product_id else master_id end) as master_id, 
     product_id, products 
from t; 
+0

私は大文字と小文字を区別して使用できます(...) – Shubham

+0

select distinctを使用できますか? 商品の数を検索したい 私の質問。 別の質問がある場合は、質問として質問する必要があります(マスターIDが0の場合はproduct_id、他の場合はmaster_idの終了)master_idとしてcount(別名(product_id))がmaster_idによってmytableグループからtotal_productsとして表示されます。 – Shubham

+0

@SRingne。しかし、コメントではありませんが、 'select different 'の' distinct'は 'select'のすべての式に適用されます。カウントを得るには' group by'を使う必要があります。 –

1

あなたはパンダのデータフレームを使用したい場合numpy.where機能を使用することができます

import numpy as np 
import pandas as pd 

# initialise dataframe 
df = pd.DataFrame([[0, 12, 15, 0, 25], 
        [123, 234, 456, 678, 890], 
        ['home', 'office', 'home', 'office', 'home']]).T 
df.columns = ['master_id', 'product_id', 'products'] 

# Now do fix master_id 
df.master_id = np.where(df.master_id == 0, df.product_id, df.master_id) 

# New df: 
    master_id product_id products 
0 123   123   home 
1 12   234   office 
2 15   456   home 
3 678   678   office 
4 25   890   home 
関連する問題