【发布时间】:2020-07-17 22:29:52
【问题描述】:
我有一个场景,我试图按特定值过滤数据帧,并计算另一个标识符出现的次数。然后我将其转换为字典并映射回数据框。我遇到的问题是生成的字典无法映射回数据框,因为我给字典引入了复杂性(额外的键?),我不知道如何避免它。
我想这个简单的问题是:'如何在我的 CELL_ID 列上使用 value_counts',按另一个名为 Grid_Type 的列进行过滤,并将结果映射回每个 CELL_ID 的所有单元格?
我目前在做什么
这可以计算有多少单元格包含 CELL_ID,但不允许我按 Grid_Type 过滤
df['CELL_ID'].value_counts()
z1 = z.to_dict()
df['CELL_CNT'] = df['CELL_ID'].map(z1)
这个简单示例的字典输出如下所示:
7015988: 1, 7122961: 1, 6976792: 1
我的错误代码
这是我迄今为止一直在做的事情——我希望能够返回由 Grid_Type 过滤的计数。例如,我希望能够计算在每个 CELL_ID 中/按每个 CELL_ID 看到“Spot”的次数。
z = df[df.Grid_Type == 'Spot'].groupby('CELL_ID')['Grid_Type'].value_counts()
z1 = z.to_dict()
df['SPOT_CNT'] = df['CELL_ID'].map(z1)
似乎在我试图过滤的示例中,字典返回了一个更复杂的结果,其中包括 Grid_Type。问题是,我只想将计数映射到 Cell_ID。例如字典响应:
(7133691, 'Spot'): 3, (7133692, 'Spot'): 3, (7133693, 'Spot'): 2
示例数据
+---------+-----------+
| CELL_ID | Grid_Type |
+---------+-----------+
| 001 | Spot |
| 001 | Square |
| 001 | Spot |
| 001 | Square |
| 001 | Square |
| 002 | Spot |
| 002 | Square |
| 002 | Square |
| 003 | Square |
| 003 | Spot |
| 003 | Spot |
| 003 | Spot |
+---------+-----------+
期望的结果
+---------+-----------+----------+
| CELL_ID | Grid_Type | SPOT_CNT |
+---------+-----------+----------+
| 001 | Spot | 2 |
| 001 | Square | 2 |
| 001 | Spot | 2 |
| 001 | Square | 2 |
| 001 | Square | 2 |
| 002 | Spot | 1 |
| 002 | Square | 1 |
| 002 | Square | 1 |
| 003 | Square | 3 |
| 003 | Spot | 3 |
| 003 | Spot | 3 |
| 003 | Spot | 3 |
+---------+-----------+----------+
感谢您提供的任何帮助/
【问题讨论】:
标签: python pandas dataframe pandas-groupby