2017-08-22 11 views
0

私は古いデータ収集技術と新しいデータ収集技術を比較しています。私は1つの列を合計し、他の列は手つかずのままにしておく必要があります。私のデータフレームは、次のようになります。1つの列を無視しながら特定の行を合計する

  new old 
apples 25 11 
pears  12 4 
apples 25 5 
apples 25 8 
bananas 5  1 
pears  12 9 
bananas 5  5 

新しいデータ収集技術は常に正しい答えを作り出すが、古いものが使用された技術に基づいて異なる答えを生成します。私は、新しい技術から値を触れたくない、と私は私を残すために、古い技術のための値を合計したい:

  new old 
apples 25 24 
pears  12 13 
bananas 5  6 

私はGROUPBYはこの1つのために私の友人であることをかなり確信していますただし、新しい列を移入する方法を理解することはできません。

答えて

0

あなたは正しく、groupbyはあなたの友人です。次の手順を試してみてください。

df.groupby('new').old.sum().reset_index() 

    new old 
0 5 6 
1 12 13 
2 25 24 

ただし、元のデータフレームのインデックスは失われます。

あなたのインデックスを維持したい場合は、次の操作を行うことができます:

my_df = my_df.reset_index().groupby('index').agg({'new':'first','old':'sum'}) 
del my_df.index.name 

     old new 
apples 24 25 
bananas 10 5 
pears 9 12 

あなたは、元の索引気にしないのであれば、私はそれがより効率的であるとして、あなたは、元を使用することをお勧め:

%timeit my_df.groupby('new').old.sum().reset_index() 
817 µs ± 2.22 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) 

%timeit my_df.reset_index().groupby('index').agg({'new':'first','old':'sum'}) 
1.33 ms ± 1.02 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) 
+0

素晴らしい!それは動作します。私はあなたの最初の提案を使用しています、私はインデックスについて気にしないので。しかし、2番目のオプションをメモします。ありがとうございました! – user4896331

関連する問題