Python Pandas-按每个可能的键组合进行聚合
我有一个DataFrame Pandas,我想用a、B、C和d列的组合按最可能的数据进行分组 假设它有以下形式:Python Pandas-按每个可能的键组合进行聚合,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个DataFrame Pandas,我想用a、B、C和d列的组合按最可能的数据进行分组 假设它有以下形式: A B C D E F G 0 Y X Y Z 1 2 7 1 Y X Y Z 3 4 8 2 X Y U V 1 1 1 3 X Y V U 1 2 0 4 X Z Z Z 1
A B C D E F G
0 Y X Y Z 1 2 7
1 Y X Y Z 3 4 8
2 X Y U V 1 1 1
3 X Y V U 1 2 0
4 X Z Z Z 1 8 1
首先,我试着在更高的层次上分组,所以我试着按['A','B','C','D']分组。对于尚未重新分组的行,我尝试使用较低的组合,如['A',B',C',['A',B',D',等等。最后,我不使用组合,只使用['A']然后['B']然后['C']然后['D']进行分组。此时,我已将数据分组,每个可能的聚合键表示A、B、C和D
使用此方法,所需输出为:
A B C D
0 Y X Y Z
1 X Y
2 X
是否可以轻松地执行这些操作?我认为您首先需要所有列值的组合:
df = pd.DataFrame({'A':[5,3,6,9,2,4],
'B':[4,5,4,5,5,4],
'C':[7,8,9,4,2,3],
'D':[1,3,5,7,1,0],
})
print (df)
A B C D
0 5 4 7 1
1 3 5 8 3
2 6 4 9 5
3 9 5 4 7
4 2 5 2 1
5 4 4 3 0
from itertools import combinations
a = df.columns
comb = [j for i in range(len(a), 0, -1) for j in combinations(a,i)]
print (comb)
[('A', 'B', 'C', 'D'),
('A', 'B', 'C'), ('A', 'B', 'D'), ('A', 'C', 'D'), ('B', 'C', 'D'),
('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D'),
('A',), ('B',), ('C',), ('D',)]
a = pd.concat([df.loc[:, x].sum(axis=1) for x in comb], axis=1)
print (a)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 17 16 10 13 12 9 12 6 11 5 8 5 4 7 1
1 19 16 11 14 16 8 11 6 13 8 11 3 5 8 3
2 24 19 15 20 18 10 15 11 13 9 14 6 4 9 5
3 25 18 21 20 16 14 13 16 9 12 11 9 5 4 7
4 10 9 8 5 8 7 4 3 7 6 3 2 5 2 1
5 11 11 8 7 7 8 7 4 7 4 3 4 4 3 0
然后通过获取所有副本,并通过以下方式获取firastTrue
s:
最后一次将此数组用作groupby
的参数:
df = df.groupby(a).sum()
print (df)
E F G
0 4 6 15
5 2 3 1
11 1 8 1
现在还不清楚你想要实现什么。请发布一些输入数据和所需输出。您当前的输入数据只是一个空的dataframeYes。我修改了问题。谢谢你的回答。我意识到我还不清楚。我希望使用函数groupBy,按所有可能的组合(从高到低)对数据进行分组
df = df.groupby(a).sum()
print (df)
E F G
0 4 6 15
5 2 3 1
11 1 8 1