【问题标题】:Counting occurrence using Python使用 Python 计算出现次数
【发布时间】:2019-01-10 14:01:23
【问题描述】:

我正在尝试按列计算 CSV 文件中某种类型值的出现次数,因此程序将执行的操作是如果存在 0 则忽略该行并计算其余行。

Program pseudocode -

Count each column
if the value is greater than 0 count
else ignore
continue till the  last row of each column
print Total count

要记住一件事 - 大约有 5000 列和 50 行,第二行是标题。此外,第一列是我们不想计算的文本格式。如果您检查我附上的图像,它将使一切清楚。我尝试了一些,但没有一个工作。

df = df.set_index('ID_REF')
df = df.append(pd.DataFrame(dict(((df.notnull()) & (df != 0)).sum()), index=['Final']))

这是 csv 文件图像版本:

这是我正在寻找的输出:

【问题讨论】:

  • "如果值更大" - 哪个值?我在您的示例中看到的唯一 0 是第一列的索引。是否要计算每列中的非零元素?
  • 你当前代码的输出是什么?
  • 如果每一列的任何值大于0,是非零元素,如果检查输出应该清楚,第一列显示54表示没有0值,但第二个显示 53 表示有一个 0 值,第三个显示 52 表示该列中有两个 0 值,这就是我要查找的输出。如果您还有任何困惑,请询问:)
  • @harvpan @harvpan df = pd.read_csv('transposed.csv').reset_index() # update headers df.columns = df.iloc[0] df = df.iloc[1:].set_index("ID_REF") df.loc["Final"] = (df != 0).sum() 这是此代码的输出:link

标签: python-3.x pandas for-loop count


【解决方案1】:

只需使用:

df.ne(0).sum()

按列汇总非零值的数量。

如果您想将其重新粘贴到原始数据框中,请将系列重命名为 total 以便调用索引,然后使用 append

df.append(df.ne(0).sum().rename('total'))

示例

>>> df
   0  1  2  3  4
0  0  0  1  0  1
1  1  0  1  1  0
2  0  0  0  1  1
3  1  1  1  0  0
4  1  1  0  0  0

>>> df.ne(0).sum()
0    3
1    2
2    3
3    2
4    2
dtype: int64

>>> df.append(df.ne(0).sum().rename('total'))
       0  1  2  3  4
0      0  0  1  0  1
1      1  0  1  1  0
2      0  0  0  1  1
3      1  1  1  0  0
4      1  1  0  0  0
total  3  2  3  2  2

【讨论】:

  • 我必须在每列之后存储它,最终结果必须以 csv 输出。
  • 只使用to_csv():df.append(df.ne(0).sum().rename('total')).to_csv('filename.csv')
  • 你能修改你的代码只计算数字或浮点值吗?不是字母数字的吗?谢谢
猜你喜欢
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
相关资源
最近更新 更多