熊猫:如果值在一列中存在,则将其替换

时间:2019-10-04 19:13:47

标签: python pandas

尝试编写一个For循环,以查看Pay_Day_Supply_Count列中是否存在数字,如果存在,请将Days列中的天数替换为0。 / p>

Example Dataframe

|Days   | Pay_Day_Supply_Count  |
--------------------------------|
|   0   |     15                |
| -456  |     50                |
|  121  |     10                |
|   0   |     15                |
|   0   |     10                |
|  323  |     20                |
|   0   |     05                |
| -444  |     10                |
|  141  |     20                |
---------------------------------
Expected Output

|Days   | Pay_Day_Supply_Count  |
--------------------------------|
|   0   |     15                |
|   0   |     50                |
|   0   |     10                |
|   0   |     15                |
|   0   |     10                |
|   0   |     20                |
|   0   |     05                |
|   0   |     10                |
|   0   |     20                |
---------------------------------

这是我到目前为止尝试过的:

for i, p in enumerate(df["Days"]):
    if df["PAY_DAY_SUPPLY_CNT"] != '': 
        p1 = p.replace('%d', 0)
        df.at[i, 'Days'] = p1 

返回的错误

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

2 个答案:

答案 0 :(得分:3)

也许使用布尔掩码可能会有所帮助。不过不确定您的dtypes:

mask = df[Pay_Day_Supply_Count].notna()
df.loc[mask, "Day"]=0

答案 1 :(得分:1)

您可以使用numpy.where函数在一行中完成此操作:

import pandas as pd
import numpy as np

df['Days'] = np.where(df["PAY_DAY_SUPPLY_CNT"] != '', 0 , df['Days'] )