我对分组“其他”的语法有疑问。例如,
df
Type Start End Count Total
A x a 1 3
A x b 1 3
A x c 1 3
A y A 2 4
A y b 1 4
A y c 1 4
B x A 1 6
B x b 2 6
B x c 3 6
B y a 3 6
B y b 2 6
B y c 1 6
按类型/开始/结束列分组,如果结束不包含“ a”或“ A”,则将其标记为“其他”
Type Start End Count Total
A x a 1 3
A x other 2 3
A y A 2 4
A y other 2 4
B x A 1 6
B x other 5 6
B y a 3 6
B y other 3 6
最佳答案
你快到了groupby
的前两个参数很好,但最后一个需要修改。
f = {'Count': 'sum', 'Total' : 'mean'}
v = df.End.where(df.End.isin(['a', 'A']), 'other')
df.groupby(['Type', 'Start', v]).agg(f).reset_index()
Type Start End Total Count
0 A x a 3 1
1 A x other 3 2
2 A y A 4 2
3 A y other 4 2
4 B x A 6 1
5 B x other 6 5
6 B y a 6 3
7 B y other 6 3
细节
使用
where
/ mask
相应地更改df.End
的值;v = df.End.where(df.End.isin(['a', 'A']), 'other')
要么,
v = df.End.mask(~df.End.isin(['a', 'A']), 'other')
v
0 a
1 other
2 other
3 A
4 other
5 other
6 A
7 other
8 other
9 a
10 other
11 other
Name: End, dtype: object
或者,将列小写并进行比较。
v = df.End.where(df.End.str.lower().eq('a'), 'other')
其余的,正如他们所说,是历史。如果您对保留列顺序感兴趣,请在最后调用
reindex
。df.groupby(['Type', 'Start', v])\
.agg(f)\
.reset_index()\
.reindex(columns=df.columns.tolist())
Type Start End Count Total
0 A x a 1 3
1 A x other 2 3
2 A y A 2 4
3 A y other 2 4
4 B x A 1 6
5 B x other 5 6
6 B y a 3 6
7 B y other 3 6
关于python - Pandas 团聚给他人,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48289610/