假设我有一组带有两个标签的数据,放在一个pandas Dataframe:
中 label1 label2
0 0 a
1 1 a
2 1 a
3 1 a
4 1 a
5 2 b
6 0 b
7 1 b
8 2 b
9 0 b
10 2 c
11 1 c
12 2 c
13 0 c
14 2 c
使用以下代码,可以获得每种标签组合的元素数量:
grouped = df.groupby(['label1', 'label2'], sort = False)
grouped.size()
结果是这样的:
label1 label2
0 a 1
1 a 4
2 b 2
0 b 2
1 b 1
2 c 3
1 c 1
0 c 1
dtype: int64
但是,我还想比较每个标签1组中标签2的数据分布。我想为此目的进一步操作数据最方便的方法是使用一个Dataframe(或某种表),其中label1 / 2为行/列,内容为数据计数,如下所示:
a b c
0 1 2 1
1 4 1 1
2 0 2 3
经过一段时间的搜索,令我惊讶的是,似乎没有简单的方法在熊猫中进行这种数据帧重塑。
可以使用循环。但我认为它会超级慢,因为在真实数据中,有数十万种不同的标签。
此外,在使用label1和label2进行分组后,似乎无法从label1获取组,因此循环必须在标签组合上,这可能会使事情变得更慢更复杂。
任何人都知道这样做的聪明方法吗?
答案 0 :(得分:0)
您在寻找pd.pivot_table
吗?
df.pivot_table(index='label1', columns='label2', aggfunc='size').fillna(0)
答案 1 :(得分:0)
可能是交叉表:
pd.crosstab(df.label1, df.label2)