簡體   English   中英

比較數據框值錯誤中的 2 列

[英]Comparing 2 columns in data-frame Value Error

我有一個數據框df1 ,它看起來像:

  ID  myColA  myColB myColC
0  A       1       5     13
1  B      -2       6     14
2  C       3      -7     15
3  D       4       8     16

我正在嘗試添加一個新列myColD ,該列由以下結果填充:

myColD = ((myColA > 0 and myColB <0) or (myColA < 0 and myColB > 0)),0,myColA)

其中myColA中的行值大於 0 且myColB中的值小於 0,反之亦然返回 0,否則返回myColA值。

所以我想要的 output 是:

  ID  myColA  myColB myColC myColD
0  A       1       5     13      1
1  B      -2       6     14      0  
2  C       3      -7     15      0
3  D       4       8     16      4

這是我的代碼:

df1 = pd.DataFrame({'ID': ['A', 'B', 'C', 'D'],
    'myColA': [1, -2, 3, 4],
    'myColB': [5, 6, -7, 8],
    'myColC': [9, 10, 11, 12]},
     index=[0, 1, 2, 3])

df1['myColD'] = np.where(((df1.myColA > 0) & (df1.myColB < 0)) or ((df1.myColA < 0) & (df1.myColB > 0)), df1.myColA, 0)

然而,我收到了一個值錯誤:

ValueError:Series 的真值不明確。 使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

為此,您需要按位運算符 所以使用bitwise or| 而不是or

另請注意,您可以通過檢查兩列之間的乘積在何處產生負值來簡化此操作,並使用mask將相應的值設置為0

df1['myColD'] = df1.myColA.mask(df1.myColA.mul(df1.myColB).lt(0), 0)

print(df1)

   ID  myColA  myColB  myColC  myColD
0  A       1       5       9       1
1  B      -2       6      10       0
2  C       3      -7      11       0
3  D       4       8      12       4
​

指向這樣的列

import pandas as pd
import numpy as np
df1 = pd.DataFrame({'ID': ['A', 'B', 'C', 'D'],
    'myColA': [1, -2, 3, 4],
    'myColB': [5, 6, -7, 8],
    'myColC': [9, 10, 11, 12]},
     index=[0, 1, 2, 3])

df1['myColD'] = np.where(((df1['myColA'] > 0) & (df1['myColB'] < 0)) | ((df1['myColA'] < 0) & (df1['myColB'] > 0)), df1['myColA'], 0)
print(df1)

暫無
暫無

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

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