python - if 语句条件不适用于循环中的最后一个 i

我写了 for 循环来计算条件熵的概率,但如果循环中最后一个 i 的语句不能正常工作。

我要遍历的数组:

joint_age_dia = np.c[data["Ageover50"],data["diabetic"]]
joint_age_dia
array([['True', 'yes'],
       ['False', 'yes'],
       ['False', 'no'],
       ['True', 'yes'],
       ['True', 'no'],
       ['True', 'yes'],
       ['False', 'no'],
       ['False', 'no'],
       ['True', 'yes'],
       ['False', 'no']], dtype=object)

我创建的用于获取 (Y|X=True)、(Y|X=False) 计数的 for 循环是

for i in range(len(joint_age_dia)):
  if joint_age_dia[i][1] == 'yes' and joint_age_dia[i][0] == 'True':
    yy_t += 1

  if joint_age_dia[i][1] == 'yes' and joint_age_dia[i][0] == 'False':
    yy_f += 1

  if joint_age_dia[i][1] == 'no' and joint_age_dia[i][0] == 'True':
    yn_t += 1

  if joint_age_dia[i][1] == 'no' and joint_age_dia[i][0] == 'False':
    yn_f += 1

  else:
    None

print(yy_t) # 4
print(yy_f) # 1
print(yn_t) # 2
print(yn_f) # 3

如果循环正常工作 yn_t 应该是 1 并且 yn_f 应该是 4 但我注意到当 i = 10 时它计算数组的最后一个列表错误(因为当左侧元素为“假”时它是“否” , yn_f 应该已经递增)。

我不知道哪里出了问题......

最佳答案

由于您有一个 numpy 数组,请使用矢量解决方案:

import pandas as pd
df = pd.DataFrame(joint_age_dia).value_counts()
print(df)

输出:

0      1  
False  no     4
True   yes    4
False  yes    1
True   no     1
dtype: int64

或者作为字典:

pd.DataFrame(joint_age_dia).value_counts().to_dict()

输出:

{('False', 'no'): 4,
 ('True', 'yes'): 4,
 ('False', 'yes'): 1,
 ('True', 'no'): 1}

如果真的,您需要变量:

yy_t, yy_f, yn_t, yn_f = (
 pd.DataFrame(joint_age_dia).value_counts()
   .reindex([('True', 'yes'), ('False', 'yes'), ('True', 'no'), ('False', 'no')])
)

print(yy_t, yy_f, yn_t, yn_f)
# (4, 1, 1, 4)

但这在我看来有点难看

https://stackoverflow.com/questions/73662984/

相关文章:

swiftui - .previewLayout(PreviewLayout.fixed(width

python - 我有一个列表,其中每个元素都是列表中的单个数字。如何提取数字?

function - 了解 Common Lisp 中的泛型函数?

c++ - 指针 vector 未定义行为

string - Strip() 在 Julia 中工作很奇怪

go - context.TODO() 或 context.Background(),我更喜欢哪一个

regex - 使用先行正则表达式替换文本

haskell - 如何使用两个映射遍历 Haskell 中的二元组?

c++ - 为什么可以从另一个 unique_ptr get() 创建 unique_ptr 而不会

python - 删除文本文件中每一行的最后一个字符