在pandas数据框中,我有一个类似于以下格式的列:
我尝试了以下方法:
但结果缺少L级别,因为它没有最后一个子级别的记录。
解决方法是添加一个虚拟变量,然后再将其删除...就像这样:
0 M
1 E
2 L
3 M.1
4 M.2
5 M.3
6 E.1
7 E.2
8 E.3
9 E.4
10 L.1
11 L.2
12 M.1.a
13 M.1.b
14 M.1.c
15 M.2.a
16 M.3.a
17 E.1.a
18 E.1.b
19 E.1.c
20 E.2.a
21 E.3.a
22 E.3.b
23 E.4.a
我需要将首字母为 E、M 或 L
的所有值分组,然后针对每个组,我需要创建一个子组,其中索引为 1、2 或 3
,其中将包含每个小写字母(a、b、c 等)的记录。可能的解决方案应适用于任何级别的连接元素(在本例中,级别数为3(例如:A.1.a))。
0 1 2
E 1 a
b
c
2 a
3 a
b
4 a
L 1
2
M 1 a
b
c
2 a
3 a
我尝试了以下方法:
df.groupby([0,1,2]).count()
但结果缺少L级别,因为它没有最后一个子级别的记录。
解决方法是添加一个虚拟变量,然后再将其删除...就像这样:
df[2][(df[0]=='L') & (df[2].isnull()) & (df[1].notnull())]='x'
df = df.replace(np.nan,' ', regex=True)
df.sort_values(0, ascending=False, inplace=True)
newdf = df.groupby([0,1,2]).count()
它提供了:
0 1 2
E 1 a
b
c
2 a
3 a
b
4 a
L 1 x
2 x
M 1 a
b
c
2 a
3 a
我随后在代码中处理dummy
条目x
...
如何避免使用groupby
的这种笨拙方式?