我觉得这是一个基本问题,但我对此很陌生,只是无法破解它/找到答案。
最终,我在这里要做的是计算某个列上的唯一值,然后确定这些唯一值中的哪些在匹配列中具有多个唯一值。
所以对于这个数据,我要确定的是“谁”对所有购买都有“不止一张收据”,然后根据每个产品类别确定相同的信息。
到目前为止我的方法:
我们有一个这样的数据集:
receipt,name,etc,category
1,george,xxx,fish
1,george,xxx,cat
2,george,xxx,fish
3,bill,xxx,fish
3,bill,xxx,dog
4,jill,xxx,cat
5,bill,xxx,cat
5,bill,xxx,cat
5,bill,xxx,dog
6,george,xxx,fish
那么我可以这样做:
df.set_index(['name','receipt'])
并且变得更有趣
etc category
name receipt
george 1 xxx fish
1 xxx cat
2 xxx fish
bill 3 xxx fish
3 xxx dog
jill 4 xxx cat
bill 5 xxx cat
5 xxx cat
5 xxx dog
george 6 xxx fish
在这一点上,我觉得数据很容易处理,但我还没有弄清楚。
我感兴趣的一件事是,如果我在索引数据之前按名称对数据进行排序,则数据会按名称分组显示。在这两种情况下,索引都是相同的,所以我不知道如何在索引后使用数据的表示。
使用分类很容易找到数据
>>> orders.loc[orders['category'] == 'fish']
etc category
name receipt
george 1 xxx fish
2 xxx fish
bill 3 xxx fish
george 6 xxx fish
但我想不通的是如何告诉熊猫“给我找到一张以上收据的名单”。
小问题:
- 获取索引名称部分长度的“熊猫方式”是什么?我想我可以把
name
列变成一个集合并得到它的长度。但我对索引很好奇。
编辑/更新
谢谢你的回答!这是对我正在寻找的内容的说明:
我正在努力寻找“回头客”:拥有不止一张收据的人。
所以我的所有客户将是:
names: ['george','bill','jill'], ratio: 1.0
我的回头客:
names: ['george','bill'], ratio 0.66
所有“鱼”客户:
names: ['george','bill'], ratio: 0.666
我的重复“鱼”客户:
names: ['george'], ratio: 0.333
我认为给出的示例看起来很有帮助,但可以随意添加任何内容。