Pandas将同一行组合到新列中,同时保留行(不是简单的分组)

时间:2017-10-16 14:10:05

标签: python pandas numpy data-analysis

我是一名熊猫初学者,需要一些帮助。

我有以下pandas数据帧:

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   

任何帮助都将受到高度赞赏!

2 个答案:

答案 0 :(得分:1)

我认为您需要sort_values首先使用reset_index获得漂亮的单调唯一索引,然后transform使用abssum

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

答案 1 :(得分: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