我有一个Pandas Dataframe ,大部分包含布尔列。一个小例子是:
import pandas as pd
df = pd.DataFrame({"A": [1, 2, 3, 1, 2, 3],
"B": ['a', 'b', 'c', 'a', 'b', 'c'],
"f1": [True, True, True, True, True, False],
"f2": [True, True, True, True, False, True],
"f3": [True, True, True, False, True, True],
"f4": [True, True, False, True, True, True],
"f5": [True, False, True, True, True, True],
"target1": [True, False, True, True, False, True],
"target2": [False, True, True, False, True, False]})
df
输出:
A B f1 f2 f3 f4 f5 target1 target2
0 1 a True True True True True True False
1 2 b True True True True False False True
2 3 c True True True False True True True
3 1 a True True False True True True False
4 2 b True False True True True False True
5 3 c False True True True True True False
对于每个f
列的每个True和False类以及("A", "B")
列中的所有组,我想对target1
和target2
列求和。
for col in ["f1", "f2", "f3", "f4", "f5"]:
print(col, "\n",
df[df[col]].groupby(["A", "B"]).agg({"target1": "sum", "target2": "sum"}), "\n",
df[~df[col]].groupby(["A", "B"]).agg({"target1": "sum", "target2": "sum"}))
现在,我需要在不使用for
循环的情况下执行此操作;我的意思是对f
列进行向量化,以减少计算时间(计算时间应该几乎等于对一个f
列进行向量化所需的时间)。
1条答案
按热度按时间mkshixfv1#
使用
DataFrame.melt
,因此可以按列名f
和value
对True/False
进行聚合:然后可以通过以下方式进行选择:
或者: