Python将根据另一个单元格中的值检查列中的单元格值
如果某一列中的值大于或不大于0,我需要检查数据帧中的每一行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
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
真的是个坏主意,应该尽量避免,检查谢谢,我不知道。