2017-10-16 114 views
1

我是熊猫初学者,需要一些帮助。熊猫将同一行组合成新列,同时保留行(不是简单的分组)

我有以下的熊猫数据框:

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 

任何帮助将不胜感激!

回答

1

我认为你需要sort_values先用reset_index为漂亮的单调唯一索引,然后用abssumtransform

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

如果是50, 30,(不是负面的):-) – Wen

+0

我需要它与否定,这就是为什么我给了这个确切的例子... – Tom

+0

@汤姆 - 所以可以使用'abs'? – jezrael

0

假设你有两个正数:

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 
相关问题