1
を生産パンダに自己参加私は形式でパンダのデータフレームのデータを持っている:不要な重複
CompanyA, CompanyB, Currency, Item, Amount
典型的な行は次のようになります。
Microsoft,Oracle,USD,Item_X,252.23
Microsoft,Oracle,USD,Item_Y,234.23
Microsoft,Oracle,EUR,Item_X,23352.00
Microsoft,Oracle,EUR,Item_Y,23344.80
Microsoft,IBM,GBP,Item_X,123.12
Microsoft,IBM,GBP,Item_Y,432.12
Oracle,IBM,EUR,Item_X,999.23
Oracle,IBM,EUR,Item_Y,234.23
金額フロートであれば、他の人を文字列です。
アイテムの項目を展開して、各項目の項目が独自の列を取得するようにしました。ここには金額が含まれています。基本的に、データを長くするのではなく、より広くする。
df = pd.merge(df, df, on=['CompanyA', 'CompanyB', 'Currency'])
これは、ほぼ右の出力を生成し、それはそれぞれの行を4回参加する:
を、私はのようなものを試してみた - 自己結合する必要がありますように感じるCompanyA, CompanyB, Currency, Item_X, Item_Y
Microsoft,Oracle,USD,252.23, 234.23
Microsoft,Oracle,EUR,,23352.00,23344.80
... and so on.
Item_X -> Item_X
Item_X -> Item_Y
Item_Y -> Item_X
Item_Y -> Item_Y
私は明らかにItem_X - > Item_Yに興味があります。
SQLでは、さらにクエリに拘束されますが、これは私が立ち往生しているところです - パンダではどうしたらいいですか?または、より簡単な方法がありますか?
乾杯!
フィル。
が、これは私が望んでいたまさにです、ありがとうございました。私はピボット解決策に近いので、aggfuncを指定しませんでした。なぜなら、私のデータセットではaggfuncが意味をなさないからです。複製は存在しないので、私はaggfuncのために何かを置くことができ、結果は有効です....しかし、重複がなければ、おそらくアンスタックを実行する方が速いでしょうか? – Phil
はい、正確です。高速化は最初の解決策ですが、重複するとエラーが発生します。別の解決策を使用することも可能です。 – jezrael