Python将根据另一个单元格中的值检查列中的单元格值

Python将根据另一个单元格中的值检查列中的单元格值,python,pandas,Python,Pandas,如果某一列中的值大于或不大于0,我需要检查数据帧中的每一行 tshirt pants sweater socks Product_1 Product_2 Product_3 Expected 0 1 0 1 sweater tshirt pants True 1 1 0 1 sweater tshirt socks T

如果某一列中的值大于或不大于0,我需要检查数据帧中的每一行

tshirt  pants   sweater socks   Product_1   Product_2   Product_3  Expected
0       1        0       1      sweater      tshirt     pants        True
1       1        0       1      sweater      tshirt     socks        True
0       1        0       0      socks        sweater    socks        False
1       1        0       1      sweater      tshirt     sweater      True
0       0        0       0      socks        sweater    tshirt       False
例如,“Product_1”列中的值是“tshirt”,我需要检查thshirt列中的值是否大于0

tshirt  pants   sweater socks   Product_1   Product_2   Product_3  Expected
0       1        0       1      sweater      tshirt     pants        True
1       1        0       1      sweater      tshirt     socks        True
0       1        0       0      socks        sweater    socks        False
1       1        0       1      sweater      tshirt     sweater      True
0       0        0       0      socks        sweater    tshirt       False
如果三个“产品”列中的一个值大于0,则另一列可能会说True,否则会说False(请参阅预期列)

生成示例数据的代码:

import pandas as pd
import numpy as np

recomendations = ['tshirt', 'pants', 'sweater', 'socks']
size = 100


data = pd.DataFrame()

# Generate data
for idx, i in enumerate(recomendations):
    data[i] = np.random.choice([0,1], size=100)

    if idx <= 3:
        data[f'Product_{idx}'] = np.random.choice(recomendations, size=size)
# Sort        
data[recomendations + ['Product_1', 'Product_2', 'Product_3']]
将熊猫作为pd导入
将numpy作为np导入
建议=['tshirt'、'裤子'、'毛衣'、'袜子']
尺寸=100
data=pd.DataFrame()
#生成数据
对于idx,枚举中的i(建议):
数据[i]=np.随机选择([0,1],大小=100)
如果idx为0:
track.append(1)
其他:
track.append(0)
如果frame.loc[idx,[i代表frame.columns中的i,如果我不在str_cols中]].sum()<1:
无采购+=1
结果=无采购/(长度(轨道)-np.总和(轨道))
返回结果
用于
产品
列,带有
最大值
,用于指示器输出(通常为1,0):

然后将按位
1
填充的每行值与较大值(如
0
)进行比较的条件链接起来:

mask = df.eq(1) & data.loc[:, data.columns.isin(df.columns)].gt(0)
print (mask)
   pants  socks  sweater  tshirt
0   True  False    False   False
1  False   True    False    True
2  False  False    False   False
3  False  False    False    True
4  False  False    False   False
如果每行至少有一个
True
,则进行最后一次测试:

用于
产品
列,带有
最大值
,用于指标输出(通常为1,0):

然后将按位
1
填充的每行值与较大值(如
0
)进行比较的条件链接起来:

mask = df.eq(1) & data.loc[:, data.columns.isin(df.columns)].gt(0)
print (mask)
   pants  socks  sweater  tshirt
0   True  False    False   False
1  False   True    False    True
2  False  False    False   False
3  False  False    False    True
4  False  False    False   False
如果每行至少有一个
True
,则进行最后一次测试:


另一种方法是这种方法

expected = []

for index, row in data.iterrows():
    product1 = row["Product_1"]
    product2 = row["Product_2"]
    product3 = row["Product_3"]
    if row[product1] > 0 or row[product2] > 0 or row[product3] > 0:
        expected.append(True)
    else:
        expected.append(False)

data['Expected'] = expected
print(data)

另一种方法是这种方法

expected = []

for index, row in data.iterrows():
    product1 = row["Product_1"]
    product2 = row["Product_2"]
    product3 = row["Product_3"]
    if row[product1] > 0 or row[product2] > 0 or row[product3] > 0:
        expected.append(True)
    else:
        expected.append(False)

data['Expected'] = expected
print(data)

到目前为止,您尝试了什么?是否可以为具有预期输出的相同随机数据添加
np.random.seed(2020)
,例如,前3行?您的预期输出是什么?到目前为止您尝试了什么?是否可以为具有预期输出的相同随机数据添加
np.random.seed(2020)
,例如,对于前3行?您预期的输出是什么?我认为这里的
iterrows
真的是个坏主意,应该尽量避免,检查谢谢,我不知道。我认为这里的
iterrows
真的是个坏主意,应该尽量避免,检查谢谢,我不知道。