我有一个带有多级列的DataFrame
,我无法找到按列分组的方法。
是否存在解决列的问题,或者我应该选择加入this question中的名称的路径?
解决方案:我将列作为['A','X']
而不是('A','X')
答案 0 :(得分:1)
df.groupby([('depth1_column1', 'depth2_column1'), ('depth1_column1', 'depth2_column2')]).aggregate(sum)
答案 1 :(得分:0)
您仍然可以在列上使用.groupby
。下面是一个简单的例子。
import pandas as pd
import numpy as np
# data
# ==========================================
np.random.seed(0)
multi_col = pd.MultiIndex.from_product([['A', 'B'], ['X', 'Y']], names=['ab', 'xy'])
df = pd.DataFrame(np.random.randint(1,5, (10,4)), columns=multi_col)
df
ab A B
xy X Y X Y
0 1 4 2 1
1 4 4 4 4
2 2 4 2 3
3 1 4 3 1
4 1 1 3 2
5 3 4 4 3
6 1 2 2 2
7 2 1 2 1
8 4 1 4 2
9 3 4 4 1
# groupby one column
# ===================================
for g_name, g in df.groupby([('A', 'X')]):
print(g_name)
print(g)
1
ab A B
xy X Y X Y
0 1 4 2 1
3 1 4 3 1
4 1 1 3 2
6 1 2 2 2
2
ab A B
xy X Y X Y
2 2 4 2 3
7 2 1 2 1
3
ab A B
xy X Y X Y
5 3 4 4 3
9 3 4 4 1
4
ab A B
xy X Y X Y
1 4 4 4 4
8 4 1 4 2
# groupby two columns
# ===================================
for g_name, g in df.groupby([('A','X'), ('A','Y')]):
print(g_name)
print(g)
(1, 1)
ab A B
xy X Y X Y
4 1 1 3 2
(1, 2)
ab A B
xy X Y X Y
6 1 2 2 2
(1, 4)
ab A B
xy X Y X Y
0 1 4 2 1
3 1 4 3 1
(2, 1)
ab A B
xy X Y X Y
7 2 1 2 1
(2, 4)
ab A B
xy X Y X Y
2 2 4 2 3
(3, 4)
ab A B
xy X Y X Y
5 3 4 4 3
9 3 4 4 1
(4, 1)
ab A B
xy X Y X Y
8 4 1 4 2
(4, 4)
ab A B
xy X Y X Y
1 4 4 4 4