对数据集进行分组和分组

m3eecexj  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(209)

我有以下数据集:

+-------+--------+---------------+----------+
| store | loc_id | competitor_id | distance |
+-------+--------+---------------+----------+
| 1     | 235467 | 567           | 1        |
| .     | .      | .             | .        |
| .     | .      | .             | .        |
| .     | .      | .             | .        |
| 1200  | 236667 | 7890          | 70       |
+-------+--------+---------------+----------+

在哪里:

store:每个商店都有唯一的编号-总计1200

loc_id:每个商店都有唯一的位置编号-总计1200个

competitors:有多种竞争对手ID。-总计600人

distance:竞争对手到商店的距离以英里为单位--最高可达70英里

这个数据集非常庞大,大约有500万行。

competitors可以在每个商店重复,因为它们可能位于不同的距离,也可以在不同的商店重复,这意味着:

+-------+--------+---------------+----------+
| store | loc_id | competitor_id | distance |
+-------+--------+---------------+----------+
| 1     | 235467 | 567           | 1        |
| 1     | 235467 | 567           | 20       |
| 65    | 235532 | 567           | 5        |
+-------+--------+---------------+----------+

我需要将每个竞争对手在距离桶内的出现情况分组,其中结果数据集如下:

+-------+--------+---------------+---------------+----------------+----------+
| store | loc_id | competitor_id | under_10miles | ten_to_20miles | above_20 | 
+-------+--------+---------------+---------------+----------------+----------+
| 1     | 235467 | 567           | 2             | 0              | 15       |
| .     | .      | .             | .             | .              | .        |
| .     | .      | .             | .             | .              | .        |
| .     | .      | .             | .             | .              | .        |
| 1200  | 236667 | 7890          | 1             | 5              | 0        |
+-------+--------+---------------+---------------+----------------+----------+

含义:

有两个567的竞争者,距离1号店不到10英里。

我使用的是Jupyter笔记本电脑,所以如果有任何帮助,我将不胜感激。

lf5gs5x2

lf5gs5x21#

您可以使用groupby().value_counts()

(df.groupby(['store', 'loc_id', 'competitor_id'])
   ['distance'].value_counts(bins=[-1, 10, 20, np.inf])
   .unstack(level=-1, fill_values=0)
)

pd.crosstabpd.cut

pd.crosstab([df['store'], df['loc_id'], df['competitor_id']],
            pd.cut(df['distance'], bins=[-1,10,20, np.inf],
                   labels=['<10', '10-20', '>20'])
           )

相关问题