これは初歩的な質問のように感じますが、私はこれに非常に慣れていないので、それを解読したり、答えを見つけることができませんでした。
最終的に私がここでやろうとしているのは、特定の列の一意の値を数え、それらの一意の値のうち、一致する列に複数の一意の値があるものを特定することです。
したがって、このデータについて、私が判断しようとしているのは、すべての購入に対して「誰が」「複数のレシート」を持っているか、そして各製品カテゴリーに基づいて同じ情報を判断することです。
これまでの私のアプローチ:
次のようなデータセットがあります。
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
与えられた例は役立つと思いますが、何でも追加してください。