python - Pandas 中的数据框转换

标签 python pandas

我正在尝试获取 python 数据框中某些列的频率计数。我有一个看起来像这样的数据框

<表类=“s-表”> <标题> 动物 正文部分 1 正文部分 2 正文部分 3 <正文> 猴子 尾部 头 腿 大象 头 尾部 主干 猴子 耳朵 头 腿 大象 眼睛 尾部 腿

我正在寻找的输出是获取相应动物的每个 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/

相关文章:

python - Pandas:从返回数据创建索引时间序列 [从 100 开始]

python - 在 PyPlot 中绘制日期时出现问题

python - 在没有互联网连接的情况下使用 plotly

python - Pandas 分发时间序列数据

python - Pandas Dataframe 到 Seaborn 分组条形图

python - Pandas 计算时差

python - 使用 pandas Python (pandas.io.parsers.TextFileReader) 从文件读取数据时出现问题

python - 在Python中生成一个名为当前时间的文本文件

python - 错误 : Test failed: 400 (InvalidToken): The provided token is malformed or otherwise invalid

python - pip、pythontools 或 easy-install 的最佳选择是什么