我有一个如下的熊猫数据框..
date item_id
2016-01-19 [188, 188]
2016-01-23 [188, 142]
2016-02-05 [188, 264]
2016-02-06 [273, 248, 191, 167, 238, 191]
2016-02-15 [320]
2016-02-17 [286]
2016-02-20 [164, 317]
在上面我想计算
No of times the item_id got repeated on different dates / no of unique item_id
的比率,因此在上述情况下item_id 188
在3个不同的日期重复了3次,因此比率将是3/no of unique item_id
3/13
创建数据框的代码
buyer_id item_id date
261_23 188 2016-01-19
261_23 188 2016-01-19
261_23 188 2016-01-23
261_23 142 2016-01-23
261_23 188 2016-02-05
261_23 264 2016-02-05
261_23 273 2016-02-06
261_23 248 2016-02-06
261_23 191 2016-02-06
261_23 167 2016-02-06
261_23 238 2016-02-06
261_23 191 2016-02-06
261_23 320 2016-02-15
261_23 286 2016-02-17
261_23 164 2016-02-20
261_23 317 2016-02-20
df.groupby(['date','buyer_id'])['item_id'].apply(lambda x: x.tolist())
最佳答案
所有唯一项的并集是
unique_items = set().union(*df.item_id.apply(set))
每个项目的出现次数是
num_appearances = [df.item_id.apply(lambda s: k in s).sum() for k in unique_items]
因此,以下将创建一个字典,将每个项目映射到您要求的比率:
dict((k, n / float(len(unique_items))) \
for (k, n) in zip(unique_items, num_appearances))
例
import pandas as pd
df = pd.DataFrame({
'date': range(5),
'item_id': [[188, 188], [188, 142], [188, 264], [273, 248, 191, 167, 238, 191], [320]]})
unique_items = set().union(*df.item_id.apply(set))
>>> unique_items
{142, 167, 188, 191, 238, 248, 264, 273, 320}
num_appearances = [df.item_id.apply(lambda s: k in s).sum() for k in unique_items]
>>> num_appearances
[1, 1, 1, 1, 1, 1, 1, 3, 1]
>>> dict((k, n / float(len(unique_items))) \
for (k, n) in zip(unique_items, num_appearances))
{142: 0.1111111111111111,
167: 0.1111111111111111,
188: 0.33333333333333331,
191: 0.1111111111111111,
238: 0.1111111111111111,
248: 0.1111111111111111,
264: 0.1111111111111111,
273: 0.1111111111111111,
320: 0.1111111111111111}
关于python - 如何在 Pandas 数据框中的某些条件下计算比率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35534533/