【问题标题】:How to get and show counts of values each column如何获取和显示每列值的计数
【发布时间】:2016-05-30 00:14:32
【问题描述】:

我有一个熊猫数据框。

df:

   col1 col2 col3 col4 col5
0   1.0  1.0  NaN  NaN  1.0
1   NaN  1.0  1.0  2.0  1.0
2   2.0  NaN  1.0  NaN  1.0

我想获取每列具有相同数据的行数,如下所示。

输出:

    col1 col2 col3 col4 col5
1.0    1    2    2    0    3
2.0    1    0    0    1    0

或者只是一个值的计数。

    col1 col2 col3 col4 col5
1.0    1    2    2    0    3

有什么方法可以得到我的预期输出?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以使用 pandas 系列的 value_counts 方法,然后使用 fillna0 填充 NaN 值:

    In [7]: df
    Out[7]:
       col1  col2  col3  col4  col5
    0   1.0   1.0   NaN   NaN   1.0
    1   NaN   1.0   1.0   2.0   1.0
    2   2.0   NaN   1.0   NaN   1.0
    
    In [8]: df.apply(lambda x: x.value_counts()).fillna(0)
    Out[8]:
         col1  col2  col3  col4  col5
    1.0     1   2.0   2.0   0.0   3.0
    2.0     1   0.0   0.0   1.0   0.0
    

    如果您需要int 值而不是浮点数,您也可以将astypeint 一起使用:

    In [9]: df.apply(lambda x: x.value_counts()).fillna(0).astype(int)
    Out[9]:
         col1  col2  col3  col4  col5
    1.0     1     2     2     0     3
    2.0     1     0     0     1     0
    

    【讨论】:

      【解决方案2】:

      编辑df.replace(np.NaN, 0) 不能跨版本可靠地工作,因此更新为改用 df.fillna(0)。 p>

      要计算每列中某个值的出现次数,请使用 value_counts。非出现值变成NaN,所以需要替换为0:

      >>> df.apply(pd.value_counts).fillna(0)
      
      
         col1  col2  col3  col4  col5
      1     1     2     2     0     3
      2     1     0     0     1     0
      

      检索特定行:

      >>> df.apply(pd.value_counts).fillna(0).loc[1:1]
      
         col1  col2  col3  col4  col5
      1     1     2     2     0     3
      

      【讨论】:

      • 我尝试用 np.Nan 替换,但目前不起作用。我会调查原因,谢谢你的信息!
      • 我很惊讶它起作用了,因为 NaN == NaN 是 False;大概我的 Pandas 版本具有替换您没有的 NaN 的特殊处理?我会更新我的答案来说明这一点。
      • 我再次尝试了“replace(np.NaN, 0)”,它工作正常。我想你的方法应该是行得通的,因为我现在因为赶时间没有调查原因。非常感谢您以这种方式告知!
      猜你喜欢
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-20
      • 2019-08-28
      • 2011-10-26
      • 1970-01-01
      相关资源
      最近更新 更多