簡體   English   中英

Pandas-將列除以另一列,條件是值是否大於0?

[英]Pandas- Dividing a column by another column conditional on if values are greater than 0?

我有一個包含日期,項目和2個值的pandas數據框。 我要做的就是輸出另一列,如果列B大於0則是列A /列B的乘積,如果列B等於0,則輸出0。

   date     item   A   B        C       
 1/1/2017   a      0   3             0  
 1/1/2017   b      2   0             0  
 1/1/2017   c      5   2           2.5  
 1/1/2017   d      4   1             4  
 1/1/2017   e      3   3             1  
 1/1/2017   f      0   4             0  
 1/2/2017   a      3   3             1  
 1/2/2017   b      2   2             1  
 1/2/2017   c      3   9   0.333333333  
 1/2/2017   d      4   0             0  
 1/2/2017   e      5   3   1.666666667  
 1/2/2017   f      3   0             0  

這是我寫的代碼,但是內核一直在死(請記住這只是一個示例表,我有大約30,000行,所以沒什么太瘋狂的)

df['C'] = df.loc[df['B'] > 0, 'A'] / df['B'])

對於發生了什么的任何想法? 是無限運行會導致它崩潰嗎? 謝謝您的幫助。

你可以使用np.where獲得它

df['C'] = np.round(np.where(df['B'] > 0, df['A']/df['B'], 0), 1)

或者如果你想使用loc

df.loc[df['B'] > 0, 'C'] = df['A']/df['B']

然后fillna(0)

選項1
使用pd.Series.mask隱藏零,然后使用pd.Series.mask清空單元fillna

v = (df.A / df.B.mask(df.B == 0)).fillna(0)
v

0     0.000000
1     0.000000
2     2.500000
3     4.000000
4     1.000000
5     0.000000
6     1.000000
7     1.000000
8     0.333333
9     0.000000
10    1.666667
11    0.000000
dtype: float64

df['C'] = v

或者,用np.inf替換那些零,因為x / inf = 0

df['C'] = (df.A / df.B.mask(df.B == 0, np.inf))

選項2
df.replace直接替換

df.A / df.B.replace(0, np.inf)

0     0.000000
1     0.000000
2     2.500000
3     4.000000
4     1.000000
5     0.000000
6     1.000000
7     1.000000
8     0.333333
9     0.000000
10    1.666667
11    0.000000
dtype: float64

請記住,如果你想要混合整數和浮點數,你可以做一個astype轉換:

df.A.div(df.B.replace(0, np.inf)).astype(object)

0            0
1            0
2          2.5
3            4
4            1
5            0
6            1
7            1
8     0.333333
9            0
10     1.66667
11           0
dtype: object

暫無
暫無

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

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