私のデータの一部は次のようになります。私はPythonのパンダ - 合併ほとんど重複行
data.set_index(['date', 'name'])
を実行することができますポイントを取得しようとしている。しかし、などのデータとしています
date, name, value1, value2, value3, value4
1/1/2001,ABC,1,1,,
1/1/2001,ABC,,,2,
1/1/2001,ABC,,,,35
- もちろん、上記のように重複があるので、私はこれを行うことはできません(重複したインデックスを必要としません。データを失うので、単にdrop_duplicates()することはできません)。
特定の値がNaN(combine_first()の動作に似ています)に基づいて正常に収束できる場合、同じ[日付、名前]値を持つ行を強制的に1行にすることができます。 。二つの値が異なっていると1がNaNでない場合は、例えば、上記
date, name, value1, value2, value3, value4
1/1/2001,ABC,1,1,2,35
で終わるだろう、2行が(これはおそらく、私がフォローアップする必要がありますエラーになります)収束するべきではありません。
(上記の例を拡張するために、実際にはラインの任意の数が存在してもよい - 列の任意の数の所与 - 。1行に収束することができなければならない)
これは感じますパンダを介して非常に解決しなければならない問題のようなものですが、私は優雅な解決法を見つけ出すのに苦労しています。
ありがとうございます、これは間違いなく重要なステップを削減します。これを行うには特に効率的なイディオムはありますか?私の経験(そしてあなたの提案を使った最初のテスト)では、.agg()は本当に遅い実行につながる可能性があります(おそらく驚くことではありません)。多分避けられないだろうか? – severian
おそらく? (cythonized関数を使用して)速度を上げるために、numpyの組み込み関数( "sum"、 "max"など)を使用してみることもできます。これはおそらく、通常、groupbyの通常の使用例の範囲外です。なぜなら、DataFrameの合計サイズに対して多くのグループがある可能性があるからです。 –
まあ、別の答えを除いて、少なくとも私はあまりにも明白なものを見逃していないことを知っています... – severian