在mysql python中替换列值的逻辑

时间:2016-10-27 10:59:45

标签: python mysql sql python-2.7

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

我有这个表(只显示了一部分行,超过1000行),我想写一个逻辑,这样,每当

master_id = 0,master_id = product_id

我把它变成了pandas数据帧。 现在我该如何编写这个逻辑

3 个答案:

答案 0 :(得分:1)

这是你想要的吗?

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

答案 1 :(得分:1)

你不需要pandas,你可以直接通过数据库。

如果您只想以不同方式显示记录:

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

答案 2 :(得分:1)

如果您想使用pandas数据帧,可以使用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