【问题标题】:Efficient way of counting observations in Pandas Dataframe在 Pandas Dataframe 中计算观察值的有效方法
【发布时间】:2022-01-07 06:40:30
【问题描述】:

我有以下问题。我有一个 Python 数据库,其中包含根据原籍国(前两列)的酒店客户:

  Hotel name Country  Count
0    Hotel A      US      2
1    Hotel A      UK      1
2    Hotel A      US      2
3    Hotel B      UK      2
4    Hotel B      UK      2

这意味着,在酒店 A 中,有 2 个客户来自美国,1 个来自英国;在酒店 B,他们有 2 个来自英国的客户,没有来自美国的客户。 我想要的是第三列,这意味着酒店拥有的按原产国观察的数量。到目前为止,我设法做到这一点的唯一方法是使用 for 循环,但由于我有 1000 万次观察,我想知道是否有更有效/更快的方法。

【问题讨论】:

  • 你能提供预期的输出吗?
  • 预期输出是第 3 列,df['count']。

标签: pandas loops for-loop


【解决方案1】:

你可以groupby酒店/国家和transform('count')

df['Count'] = df.groupby(['Hotel name', 'Country']).transform('count')

输出:

  Hotel name Country  Count
0    Hotel A      US      2
1    Hotel A      UK      1
2    Hotel A      US      2
3    Hotel B      UK      2
4    Hotel B      UK      2

【讨论】:

  • 谢谢!这完全有道理。但它输出“错误的项目数量通过 0,位置意味着 1”。知道为什么吗?
  • 您是否准确地运行了上面的内容?还是别的什么?
  • df['Count'] = df.groupby(['Hotel name', 'Country']).agg('count') 是这里的替代方案。
  • @Learningisamess 不,这个会执行聚合,而不是转换;)
  • 我发誓我只是复制并粘贴了上面的代码。
猜你喜欢
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2022-10-30
  • 2015-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多