Python Pandas-按每个可能的键组合进行聚合

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

我有一个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   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
然后通过获取所有副本,并通过以下方式获取firast
True
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