我是一名熊猫初学者,需要一些帮助。
我有以下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
任何帮助都将受到高度赞赏!
答案 0 :(得分:1)
我认为您需要sort_values
首先使用reset_index
获得漂亮的单调唯一索引,然后transform
使用abs
和sum
:
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