在熊猫中每行的唯一列中计算真/假值

时间:2020-01-10 13:54:16

标签: python pandas

我是熊猫的新手

我的数据框:

df

A       B       C       1       2       3       4       5       6       7       8       9
5       2       4       True    False   False   True    False   True    False   True    False
2       2       1       True    True    False   False   False   True    False   True    False
5       4       7       False   False   True    False   True    True    False   True    True
4       4       1       False   True    False   False   False   True    False   True    True
2       0       8       False   False   True    False   True    True    False   True    True

我的目标:

要计算每个类别1-9和列ABC的总和。

这样我就可以回答以下问题:

sum列的A的{​​{1}}是1的值,True的{​​{1}}是{{1} {1}}是sum

实际上,我大约有50个类别C,我想知道是否存在一种聪明的方式来计算这些总和,而不必重复50次:

5

以此类推。

谢谢您的建议。

2 个答案:

答案 0 :(得分:2)

您可以将DataFrame.meltDataFrame.pop一起按True进行过滤,以提取列,然后聚合sum

df = (df.melt(['A','B','C'], var_name='Type', value_name='mask')
       .loc[lambda x: x.pop('mask')]
       .groupby('Type')
       .sum())
print (df)
       A   B   C
Type            
1      7   4   5
2      6   6   2
3      7   4  15
4      5   2   4
5      7   4  15
6     18  12  21
8     18  12  21
9     11   8  16

答案 1 :(得分:0)

IIUC,这只是matmul

# replace your columns accordingly
df[list('123456789')].T @ df[list('ABC')] 

输出:

    A   B   C
1   7   4   5
2   6   6   2
3   7   4  15
4   5   2   4
5   7   4  15
6  18  12  21
7   0   0   0
8  18  12  21
9  11   8  16