我有以下数据集:
+-------+--------+---------------+----------+
| 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 |
+-------+--------+---------------+---------------+----------------+----------+意思:
离第一商店不到10英里,有两个567家竞争对手。
我正在使用木星笔记本,所以在Python或Pandas方面的任何帮助都将是非常感谢的。
发布于 2022-09-20 03:38:59
您可以使用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.crosstab与pd.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'])
)https://stackoverflow.com/questions/73781017
复制相似问题