我是熊猫的新手
我的数据框:
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
和列A
,B
,C
的总和。
这样我就可以回答以下问题:
第sum
列的A
的{{1}}是1
的值,True
的{{1}}是{{1} {1}}是sum
。
实际上,我大约有50个类别C
,我想知道是否存在一种聪明的方式来计算这些总和,而不必重复50次:
5
以此类推。
谢谢您的建议。
答案 0 :(得分:2)
您可以将DataFrame.melt
与DataFrame.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