2 つのキー列を持つ Pandas データフレームがあり、それらのキーのデカルト積がテーブルに存在することを確認したいと考えています (すべての組み合わせを含む 2D プロットを作成する必要があるため)。これを行うための合理的に簡潔で慣用的な方法を思い付くのに苦労しています。
たとえば、果物と野菜の組み合わせと、それらがどのように一緒に味わうかを示す次の表から始めます。
combo fruit veg
0 tasty apple carrot
1 yucky banana carrot
2 tasty banana lettuce
3 yucky lemon lettuce
考えられるすべての組み合わせが発生するこの表を完成させたいと思います。
fruit veg combo
0 apple carrot tasty
1 apple lettuce UNKNOWN
2 banana carrot yucky
3 banana lettuce tasty
4 lemon carrot UNKNOWN
5 lemon lettuce yucky
これが私が見つけた最良の方法です:
import pandas as pd
# Initial data
df=pd.DataFrame(dict(fruit=['apple','banana','banana','lemon'],
veg=['carrot','carrot','lettuce','lettuce'],
combo=['tasty','yucky','tasty','yucky']))
# Solution starts here
veg=df.groupby('veg').size().reset_index()
fruit=df.groupby('fruit').size().reset_index()
fruit[0] = veg[0] = 0 #use this dummy column for the join to work!
cartesian = pd.merge(fruit, veg, how='outer', on=0)
del cartesian[0]
all_combos = pd.merge(cartesian, df, how='left')
all_combos[ pd.isnull(all_combos.combo) ] = 'UNKNOWN'
これを行うには、より簡単でエラーが発生しにくい方法が必要だと思います...何かアドバイスはありますか?
インデックスを使用してこれを行う方法について本当に困惑しているため、 fruit
andveg
列を含むマルチインデックスの有無にかかわらず、誰かがこれを行う方法を教えてくれれば特に感謝します。私の SQL の経験に基づいて、これらはまさにインデックスが意図されている状況だと思います。