【发布时间】:2021-06-18 00:27:35
【问题描述】:
【问题讨论】:
标签: python pandas numpy conditional-statements
【问题讨论】:
标签: python pandas numpy conditional-statements
试试这个:
df['x'] = df['x'].where(df['y'].eq(0),df['x'].mul(df['y']))
【讨论】:
也许您可以为此使用 df.apply。
>>> df.x = df.apply(lambda var: var.x * var.y if var.y > 0 else var.x, axis=1)
>>> df
x y
0 150.0 0.50
1 187.5 0.75
2 460.0 1.00
3 500.0 0.00
4 30.0 0.00
【讨论】:
让我们试试
df['new'] = df.x*df.y.replace(0,1)
Out[346]:
0 150.0
1 187.5
2 460.0
3 500.0
4 30.0
dtype: float64
【讨论】:
在 y 或 y 的副本中将 0 替换为 1 怎么样?
y[y == 0] = 1
return x*y
【讨论】:
您可以使用apply 使用 lambda 进行过滤,然后按您的 x 列进行多重过滤:
In [1]: import pandas as pd
...:
...: df = pd.DataFrame({'x':[300,250,460,500,30],'y':[.5,.75,1,0,0]})
...:
...: df['x'] = df['y'].apply(lambda z: z if z > 0 else 1) * df['x']
...: print(df)
x y
0 150.0 0.50
1 187.5 0.75
2 460.0 1.00
3 500.0 0.00
4 30.0 0.00
【讨论】:
有很多方法可以做到这一点。这是其中之一。
import pandas as pd
df = pd.DataFrame({"x": [300, 250, 460, 500, 30],
"y": [0.5, .75, 1, 0, 0]})
df2 = df.copy()
df2["x"] = [df["x"][i]*df["y"][i] if df["y"][i]>0 else df["x"][i] for i in range(len(df))]
【讨论】:
试试熊猫mask:
df['x'] = df['x'].mask(df.y.gt(0), df['x']*df['y'])
In [53]: df
Out[53]:
x y
0 150.0 0.50
1 187.5 0.75
2 460.0 1.00
3 500.0 0.00
4 30.0 0.00
【讨论】: