【发布时间】:2021-06-10 17:21:56
【问题描述】:
我正在处理这种类型的 df:
import pandas as pd
df = pd.DataFrame({'GROUP': ['A', 'A', 'B', 'B', 'C', 'C','A', 'A', 'B', 'B', 'C', 'C','B', 'B', 'C', 'C','A'], 'CATEGORY': ['ORANGE', 'WHITE', 'WHITE','ORANGE','ORANGE','BLACK', 'WHITE', 'BLACK', 'BROWN','BLACK','ORANGE','BLACK', 'WHITE', 'WHITE', 'WHITE', 'BLACK', 'BLACK'],
'SHAPE':['SQUARE','TRIANGLE','SQUARE','CIRCLE','CIRCLE','CIRCLE','SQUARE','CIRCLE','TRIANGLE','CIRCLE','CIRCLE','SQUARE','CIRCLE','TRIANGLE','CIRCLE','SQUARE','CIRCLE']})
df.head()
GROUP CATEGORY SHAPE
0 A ORANGE SQUARE
1 A WHITE TRIANGLE
2 B WHITE SQUARE
3 B ORANGE CIRCLE
4 C ORANGE CIRCLE
我正在尝试按GROUP 进行分组,并对 df 中的所有列进行值计数,保持前 n 次出现。所以这里有一个关于单列的例子:
df.groupby('GROUP')['CATEGORY'].apply(lambda x: x.value_counts(normalize=True).head(2)).to_frame()
CATEGORY
GROUP
A WHITE 0.400000
BLACK 0.400000
B WHITE 0.500000
BROWN 0.166667
C BLACK 0.500000
ORANGE 0.333333
但我想要的输出是附加所有的 value_counts,如下所示:
CATEGORY SHAPE
GROUP
A WHITE 0.400000 CIRCLE 0.400000
BLACK 0.400000 SQUARE 0.400000
B WHITE 0.500000 CIRCLE 0.500000
BROWN 0.166667 TRIANGLE 0.333333
C BLACK 0.500000 CIRCLE 0.666667
ORANGE 0.333333 SQUARE 0.333333
理想情况下,将列重命名为:
CATEGORY PERC SHAPE PERC
GROUP
A WHITE 0.400000 CIRCLE 0.400000
BLACK 0.400000 SQUARE 0.400000
B WHITE 0.500000 CIRCLE 0.500000
BROWN 0.166667 TRIANGLE 0.333333
C BLACK 0.500000 CIRCLE 0.666667
ORANGE 0.333333 SQUARE 0.333333
有什么想法吗?
【问题讨论】:
-
你有很多值还是只有形状和类别?
-
这只是一个例子,在原始 df 中我有多个我想包含的分类变量。
标签: python pandas dataframe group-by