【问题标题】:Pandas table computation [duplicate]熊猫表计算[重复]
【发布时间】:2019-10-14 06:29:32
【问题描述】:

我有一张如下表:

+-------+-------+-------------+
| Code  | Event | No. of runs |
+-------+-------+-------------+
|    66 |     1 |             |
|    66 |     1 |           2 |
|    66 |     2 |             |
|    66 |     2 |             |
|    66 |     2 |           3 |
|    66 |     3 |             |
|    66 |     3 |             |
|    66 |     3 |             |
|    66 |     3 |             |
|    66 |     3 |           5 |
|    70 |     1 |             |
|    70 |     1 |             |
|    70 |     1 |             |
|    70 |     1 |           4 |
+-------+-------+-------------+

让我们将每一行称为一次运行。我想数数。每个Event 中的运行次数,每个Code 分别运行。我需要使用groupby 函数吗?我在No. of runs 列中添加了预期的输出。

【问题讨论】:

  • "每个事件的运行次数"是什么意思?你能显示预期的df吗?
  • @anky_91:已添加。
  • @db18 与欺骗链接相同
  • 那么只是一个标准的groupby? df.groupby(['SPAnr', 'Event']).count()

标签: python pandas group-by


【解决方案1】:

尝试使用 groupbytransfrom 然后 mask 重复行:

df['Runs'] = df.groupby(['Code', 'Event'])['Event']\
               .transform('count')\
               .mask(df.duplicated(['Code','Event'], keep='last'), '')

输出(将新列添加到输出数据框从比较所需的结果):

    Code     Event    No. of runs Runs
0      66      1                    
1      66      1             2     2
2      66      2                    
3      66      2                    
4      66      2             3     3
5      66      3                    
6      66      3                    
7      66      3                    
8      66      3                    
9      66      3             5     5
10     70      1                    
11     70      1                    
12     70      1                    
13     70      1             4     4

【讨论】:

  • 当我运行上面的命令时,我得到 ValueError: Wrong number of items passed 2, placement means 1
  • 更改第一行以将事件列包含为聚合列。 df.groupby(['SPAnr', 'Event'])['Event']
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 2018-10-29
  • 2019-08-03
  • 1970-01-01
相关资源
最近更新 更多