簡體   English   中英

根據 Pandas Dataframe 中的條件將兩列相乘?

[英]Multiply two columns based on a condition in a Pandas Dataframe?

我正在嘗試將 pandas dataframe 中的兩列相乘,但我正在努力這樣做。 當 y 大於 0 時,我需要將 x 列乘以 y 列。否則,x 需要保持原樣

在此處輸入圖像描述

最終結果應如下表所示:

在此處輸入圖像描述

讓我們試試

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 的副本中用 1 替換 0 怎么樣?

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

也許你可以使用 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

有很多方法可以做到這一點。 這是其中之一。

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))]

嘗試這個:

df['x'] = df['x'].where(df['y'].eq(0),df['x'].mul(df['y']))

試試 Pandas 面罩

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM