pandas - 使用 Pandas 计算数据透视表中的 boolean 值

标签 pandas dataframe boolean pivot-table

我有一个数据框 df 定义如下:

    A   B   C   D   E   F
0   a   z   l   1   qqq True
1   a   z   l   2   qqq True
2   a   z   l   3   qqq False
3   a   z   r   1   www True
4   a   z   r   2   www False
5   a   z   r   2   www False
6   s   x   7   2   eee True
7   s   x   7   3   eee False
8   s   x   7   4   eee True
9   s   x   5   1   eee True
10  d   c   l   1   rrr True
11  d   c   l   2   rrr False
12  d   c   r   1   fff False
13  d   c   r   2   fff True
14  d   c   r   3   fff True

我的目标是根据 ABC 列的唯一值创建一个表,以便我能够计算D 列的元素数和 C 列的唯一元素数。

输出看起来像这样:

       D    E
A   B       
a   z   6   2
d   c   5   2
s   x   4   2

例如,6 表示 A 列中具有值 a 的元素数量,而 2 表示 E 列中唯一元素的数量 (qqq,wwwwww).

我能够通过使用以下代码行来实现这个目标:

# Define dataframe
df = pd.DataFrame({'A':['a','a','a','a','a','a','s','s','s','s','d','d','d','d','d'],
                   'B':   ['z','z','z','z','z','z','x','x','x','x','c','c','c','c','c'],
                   'C':  ['l','l','l','r','r','r','7','7','7','5','l','l','r','r','r'],
                   'D':    ['1','2','3','1','2','2','2','3','4','1','1','2','1','2','3'],
                   'E':    ['qqq','qqq','qqq','www','www','www','eee','eee','eee','eee','rrr','rrr','fff','fff','fff'],
                   'F':   [True,True,False,True,False,False,True,False,True,True,True,False,False,True,True]})

# My code so far
a = df.pivot_table(index=['A','B','C'], aggfunc={'E':'nunique', 'D':'count'}).sort_values(by='E')
a = a.pivot_table(index=['A','B'], aggfunc='sum').sort_values(by='E')

问题:

现在我还想使用之前提出的相同标准计算数据框中存在的 TrueFalse 值的数量,结果如下所示:

        D   E   True    False
A   B               
a   z   6   2      3        3
d   c   5   2      3        2
s   x   4   2      3        1

如您所见,True 值的数量,其中 A=a 为 3,False 值为3 也是如此。

什么是实现我的最终目标的聪明而优雅的方式?

最佳答案

使用您的代码,您可以这样扩展:

# My code so far
a = df.pivot_table(index=['A','B','C'], aggfunc={'E':'nunique', 'D':'count','F':sum}).sort_values(by='E').rename(columns={'F':'F_True'})
a = a.pivot_table(index=['A','B'], aggfunc='sum').sort_values(by='E').eval('F_False = D - F_True')

输出:

     D  E  F_True  F_False
A B                       
a z  6  2     3.0      3.0
d c  5  2     3.0      2.0
s x  4  2     3.0      1.0

关于pandas - 使用 Pandas 计算数据透视表中的 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49388152/

相关文章:

c++ - 有没有像 "std::and"或 "std::or"这样的东西?

java - SQL - 如果 boolean 值为 True,则返回行

java - 将 boolean 方法从另一个类连接到 main

python - 计算列中的唯一值

python - 从数据框中删除不包含特定长度字符串的行

python - Pandas :在一行中向数据框添加多列

python - 如何旋转数据框分组结果

python - Pandas 根据索引加入两个数据框

python - 在 pandas 数据框中非常复杂的条件下获取最大值和最小值

python - 从 Dataframe 中的 2 个或更多列获取唯一值的有效方法