我写了 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 中的泛型函数?
string - Strip() 在 Julia 中工作很奇怪
go - context.TODO() 或 context.Background(),我更喜欢哪一个
haskell - 如何使用两个映射遍历 Haskell 中的二元组?