我正在尝试获取 python 数据框中某些列的频率计数。我有一个看起来像这样的数据框
我正在寻找的输出是获取相应动物的每个 body 部位的计数(如下所示)。不同 body 部位的值成为行,独特的动物成为列,每个单元格表示该动物 body 部位出现的次数。 它是数据透视表的一种形式,但不确定在 python 中应用的正确方法是什么。
| Monkey| Elephant
-------------------------
Tail | 1 | 2
Head | 2 | 1
Legs | 2 | 1
Ears | 1 | 0
Trunk | 0 | 1
最佳答案
一种方法是融合数据,然后groupby().value_counts()
(df.melt('Animal')
.groupby('Animal')
['value'].value_counts()
.unstack('Animal', fill_value=0)
)
输出:
Animal Elephant Monkey
value
Ears 0 1
Eyes 1 0
Head 1 2
Legs 1 2
Tail 2 1
Trunk 1 0
选项 2:与选项 1 类似,使用 set_index().stack()
而不是 melt
:
(df.set_index('Animal')
.stack().groupby(level=0)
.value_counts()
.unstack(level=0, fill_value=0)
)
选项 3:与选项 1 类似,但使用 pd.crosstab
:
tmp = df.melt('Animal')
out = pd.crosstab(tmp['value'], tmp['Animal'])
选项 4:在行上应用 Series.value_counts
:
(df.set_index('Animal')
.apply(pd.Series.value_counts, axis=1)
.sum(level=0).T
)
关于python - Pandas 中的数据框转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66149029/