2017-10-16 1 views
1

私はパンダの初心者であり、助けが必要です。パンダは行を保存しながら同じ列を新しい列に結合します(単純なグループではありません)

I以下のパンダのデータフレームがあります。

ID   Val-A Val-B 

aab12  lower -30 
dbc11  lower -10 
aab12  upper 50 
dbc11  upper 20 

が、私は以前のものから新しいデータフレームを生成したいとそれを行うための方法を考えることはできません。

ID   Val-A Val-B upper-lower 
aab12  lower -30 80 
aab12  upper 50  80 
dbc11  lower -10 30 
dbc11  upper 20  30 

すべてのヘルプを非常に高く評価されます!

私はあなたが素敵な単調ユニークインデックス、その後 abssumtransformため reset_indexとの最初の sort_values必要があると思う

答えて

1

df = df.sort_values('ID').reset_index(drop=True) 
df['upper-lower'] = df['Val-B'].abs().groupby(df['ID']).transform(sum) 

print (df) 
     ID val-A Val-B upper-lower 
0 aab12 lower -30   80 
1 aab12 upper  50   80 
2 dbc11 lower -10   30 
3 dbc11 upper  20   30 
+0

を、 30、(否定的ではない):-) – Wen

+0

私はそれがなぜこの正確な例を与えたのかという理由で、ネガティブで作業する必要があります。 – Tom

+0

@Tom - できるだけ 'abs'を使用できますか? – jezrael

0

を使用すると、2つの正の数持っていると仮定すると:それは50である場合

df['upper-lower']=df.groupby('ID')['Val-B'].apply(lambda x : x.diff().abs().bfill()) 
df.sort_values('ID') 
Out[394]: 
     ID Val-A Val-B upper-lower 
0 aab12 lower -30   80.0 
2 aab12 upper  50   80.0 
1 dbc11 lower -10   30.0 
3 dbc11 upper  20   30.0 
関連する問題