【问题标题】:Pandas Pivot Table Count Values (Exclude "NaN")Pandas 数据透视表计数值(不包括“NaN”)
【发布时间】:2016-05-14 02:24:10
【问题描述】:

给定以下数据框:

import numpy as np
import pandas as pd
df = pd.DataFrame({'Site':['a','a','a','b','b','b'],
                   'x':[1,1,0,1,np.nan,0],
                   'y':[1,np.nan,0,1,1,0]
                   })

df

    Site    y   x
0   a      1.0  1
1   a      NaN  1
2   a      0.0  0
3   b      1.0  1
4   b      1.0  NaN
5   b      0.0  0

我想旋转此数据框以获取每列的值计数(不包括“NaN”)。

我尝试了在其他帖子中找到的内容,但似乎没有任何效果(也许 pandas 0.18 发生了变化)?

想要的结果:

    Item  count 
Site            
a   y     2     
b   y     3     
a   x     3     
b   x     2

提前致谢!

【问题讨论】:

  • 为什么需要支点? df.count() 会给你计数(不包括 nans)?
  • 因为我需要另一个函数的数据透视表(计算每列包含 1 的行的百分比)。
  • 你能展示一下生成的数据透视表的样子吗?
  • 当然;我已经更新了帖子。
  • 我认为当函数在列表中传递时它会抱怨字符串。你可以试试pvt = pd.pivot_table(df, index = "Site", values = ["x", "y"], aggfunc = [np.sum, lambda x: len(x.dropna())]).stack().reset_index(level = 1)

标签: python-3.x pandas pivot-table


【解决方案1】:
pvt = pd.pivot_table(df, index = "Site", values = ["x", "y"], aggfunc = "count").stack().reset_index(level = 1)
pvt.columns = ["Item", "count"]

pvt
Out[38]: 
     Item  count
Site            
a       x      3
a       y      2
b       x      2
b       y      3

如果您希望 y 先出现,可以添加 pvt.sort_values("Item", ascending = False)

【讨论】:

    猜你喜欢
    • 2020-05-02
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 2013-03-12
    • 1970-01-01
    • 2017-05-13
    相关资源
    最近更新 更多