【问题标题】:Append row with counts in PANDAS在 PANDAS 中添加计数行
【发布时间】:2017-01-26 07:26:23
【问题描述】:

我有一个包含分类数据的数据框,其结构如下:

index    A    B    C    D
ind1     0    0    1    2
ind2     1    0    2    0
ind3     2    1    0    0

我想追加一行,它只对"1" 的实例求和。期望的结果如下所示:

index    A    B    C    D
ind1     0    0    1    2
ind2     1    0    2    0
ind3     2    1    0    0
count1   1    1    1    0

我已导入表格,使所有字符都是字符串,并尝试了以下操作:

dataframe = dataframe.append(dataframe.applymap(lambda x: str.count(x, "1"))

但是,这会导致许多额外的行没有意义。非常感谢任何帮助!

【问题讨论】:

  • 您还假设条目是字符串还是整数?主要是因为您使用了str.count
  • 我在创建此数据框时使用了 dtype=object 以确保所有字符都表示为字符串。
  • hm.... 那么下面的两种解决方案可能都无法正常工作,请执行.astype(int) 以使它们正常工作或在相等检查中使用'1'

标签: python pandas sum append conditional-statements


【解决方案1】:

你可以求和布尔掩码df == 1:

print (df == 1)
           A      B      C      D
index                            
ind1   False  False   True  False
ind2    True  False  False  False
ind3   False   True  False  False


df.loc['count1'] = (df == 1).sum()

print (df)
        A  B  C  D
index             
ind1    0  0  1  2
ind2    1  0  2  0
ind3    2  1  0  0
count1  1  1  1  0

【讨论】:

    【解决方案2】:

    不确定是要对 1s 求和还是要数 1。这假设dtype 不是object。如果您检查'1' 而不是1,则只有@jezrael 的解决方案才有效。

    对 1 求和:

    sr = df.where(df == 1, 0).sum()
    sr.name = 'count1'
    df.append(sr)
    

    要计算 1,您可以使用 @jezrael 突出显示的方法 here

    在这种情况下,结果是相同的,因为你是对 1 求和,但如果你想对 2 求和,那么它们会给出不同的结果。

    【讨论】:

    • 谢谢!!这很有帮助
    猜你喜欢
    • 1970-01-01
    • 2019-12-14
    • 2018-01-05
    • 2017-01-14
    • 1970-01-01
    • 2016-01-30
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多