【问题标题】:Count the frequency of two linked columns in Python [duplicate]计算Python中两个链接列的频率[重复]
【发布时间】:2018-11-20 02:24:24
【问题描述】:

所以,这是我的问题。我有两列:

level | people
 low  | person1
 low  | person1
 high | person1
 high | person2
medium| person2

我想在另一个单元格中写一个这样的表格:

people |low|medium|high|
person1 | 2 |   0  |  1 |
person2 | 0 |   1  |  1 |

我正在尝试使用 pandas(groupby, value_count...) 和 openpyxl,但没有任何效果,并且无法手动执行,因为它是一张包含一千个值的工作表。请帮忙。

【问题讨论】:

  • 您能展示一些示例数据吗?用 Python 构造一个较小版本的数据结构,然后用print(repr(my_variable)) 打印出来,然后给我们看结果。 (或者只是将您的 Excel 文件裁剪为 4 或 5 个值并导入裁剪后的版本,然后向我们展示 pandas 变量。)

标签: python pandas


【解决方案1】:

我觉得pivot_table这个用法很好

df.pivot_table(columns='level', index='people', aggfunc='size').fillna(0)

【讨论】:

  • 不添加新列的建议:df.pivot_table(index='people', columns='level', aggfunc=lambda x: x['level'].count())
  • 更好的是,避免使用lambdadf.pivot_table(columns='level', index='people', aggfunc='size').fillna(0)
  • 好@ALollz!编辑答案以匹配
  • @ALollz 更好,喜欢它...会比 lambda 更快
  • @Chris 虽然我认为解决这些问题的最快方法仍然是groupby + unstack: df.groupby(['people', 'level']).size().unstack().fillna(0).astype(int)。通常比.pivot_tablecrosstab 总是因为某种原因更慢。
猜你喜欢
  • 2017-01-27
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
相关资源
最近更新 更多