私は2つのキー列を持つパンダデータフレームを持っています。これらのキーのデカルト積がテーブルに存在していることを確認します。すべての組み合わせを含む2Dプロット)。私はこれを行うには、合理的に簡潔で慣用的な方法を思いついて問題を抱えています。キーのデカルト積がパンダテーブルに表示されるようにする
例えば、私は果物や野菜の組み合わせを与え、このテーブルで開始し、そしてそれらがどのように一緒に味:
combo fruit veg
0 tasty apple carrot
1 yucky banana carrot
2 tasty banana lettuce
3 yucky lemon lettuce
私はすべての可能な組み合わせが発生したこのテーブルで終わるしたい:
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'
I:
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
は、ここで私はそれを行うことを見つけた最善の方法ですこれを行うには、よりシンプルでエラーが発生しにくい方法があるはずです...アドバイスはありますか?
誰かがどのように私は本当にインデックスでこれを行う方法についてを困惑していますので、マルチインデックスは、fruit
とveg
列を含むとしてない場合の両方でこれを行うには私を見ることができれば、私は特にそれをいただければと思います。私のSQLの経験に基づいて、私はこれらがインデックスが意図している状況だと思います。
ありがとう、アンディ、これは私のためにうまくいきます。 'df1.reindex(fruit_x_veg、fill_value = 'UNKNOWN')'のようなreindexに 'fill_value'オプションの引数があるように見えます。 –
@Dan Excellent!どのように素敵ですか? –
@Dan FYIこの機能をネイティブに追加する方法については最近の[github issue](https://github.com/pydata/pandas/issues/3835)があります。 –