首页 > 解决方案 > Python 评分 pandas,字符串验证

问题描述

我正在尝试为具有两个属性(列)值等于“开”的每个参与者(由一行表示)添加一个分数“1”。

但是,即使单元格都包含“开”,这也不会分配 1 分。

有更简单的解决方案吗?

for row in reduction.itertuples():
    if str(reduction['q1-1']) == "On" and str(reduction['q1-2']) == "On":
        q1 = 1
    else:
        q1 = 0
    print(q1)

标签: pythonpandasiterator

解决方案


如果需要新列q创建布尔掩码并转换为整数:

reduction = pd.DataFrame({
    'q1-1': ['On','On','Off','Off'],
    'q1-2': ['On','Off','On','Off']
})

mask = (reduction['q1-1'].astype(str) == "On") & (reduction['q1-2'].astype(str)  == "On")

#alternative
mask = (reduction[['q1-1','q1-2']].astype(str) == "On").all(axis=1)
reduction['q'] = mask.astype(int)
print (reduction)
  q1-1 q1-2  q
0   On   On  1
1   On  Off  0
2  Off   On  0
3  Off  Off  0

替代解释:

将子集选择的列转换为字符串并比较:DataFrame.eq ==

print (reduction[['q1-1','q1-2']].astype(str) == "On")
    q1-1   q1-2
0   True   True
1   True  False
2  False   True
3  False  False

然后检查每行的all值是否为s:True

print ((reduction[['q1-1','q1-2']].astype(str) == "On").all(axis=1))
0     True
1    False
2    False
3    False
dtype: bool

推荐阅读