【问题标题】:Using value_counts with False/True. How to get false/true = 0 when there is any false or true将 value_counts 与 False/True 一起使用。当有任何假或真时如何得到假/真= 0
【发布时间】:2021-08-12 11:41:07
【问题描述】:

我正在编写一个生成报告的应用程序。输出的一部分显示两列之间有多少匹配项(匹配 = True,不匹配 = False)。为了做到这一点,我使用df.column.value_counts() 输出是

False    2
True     1
Name: column, dtype: int64

所以我想在报告中显示类似的结果

# This is a simplify example
print(" Position with same genotype: ", df.column.value_counts()[1])
print(" Position with different genotype: ", df.column.value_counts()[0])

我注意到这个输出的顺序会根据表中首先找到的 False 或 True 发生变化(我想我可以用 sort 解决这个问题)。但是,我想到的另一个更大的问题是,如果在表中没有找到 False 或非 True,则输出为:

# For example not Falses
True     3
Name: column, dtype: int64

这是我预料到的:

# For example not Falses
True     3
False    0
Name: column, dtype: int64

如何解决此问题以避免将来出现错误?这与发生的情况完全不同,它至少会有一个错误或正确的结果,但我想确保不会发生错误,因为此应用程序将使用不同的样本多次运行,因此理论上这种情况可能会发生。

【问题讨论】:

  • “无 False 或非 True”值是什么意思,df 中出现的其他选项是什么?
  • @flyinthelotion 我认为他的意思是如果只找到真值,他可以通过检查列表的长度来解决。如果它只有 1,那么您缺少其中一个值并且可以处理
  • @flyinthelotion 应用程序运行时,可能会出现三种情况:首先在列中找到 True 和 False,第二次仅找到 True,第三次仅找到 False。 @Sean Powell 谢谢,这可能是一种解决方案,问题是找到一种方法,让我知道能够返回的缺失值是什么,例如 True = 0

标签: python pandas


【解决方案1】:

Series.get

我们可以使用pandas系列的get方法,指定默认值为0

s = df['column'].value_counts()

print("Position with same genotype: ", s.get(True, 0))
print("Position with different genotype: ", s.get(False, 0))

结果

Position with same genotype:  2
Position with different genotype:  1

【讨论】:

  • 让我看看这个方法,我会回来找你的。谢谢!
【解决方案2】:

您还可以将reindex()TrueFalse(即[False, True])和fillna(0) 一起使用,以获得始终固定序列的结果(False 然后True)以及默认值值 0 即使不存在:

df['column'].value_counts().reindex([False, True]).fillna(0).astype(int)

演示:

val_count = df['column'].value_counts().reindex([False, True]).fillna(0).astype(int)

print(" Position with same genotype: ", val_count[1])
print(" Position with different genotype: ", val_count[0])

输出:

Position with same genotype:  1
Position with different genotype:  2

【讨论】:

    【解决方案3】:

    经过数周的研究,我发现了另一种尚未解释的方法

    # This column has hom and het values only
    df['Hom/het'].value_counts()["hom"] 
    1234
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-30
      • 2015-03-30
      • 2014-10-18
      • 2014-02-17
      • 2020-12-06
      • 2011-09-22
      • 1970-01-01
      • 2012-06-06
      相关资源
      最近更新 更多