熊猫将同一行组合成新列,同时保留行(不是简单的分组)
问题描述:
我是熊猫初学者,需要一些帮助。熊猫将同一行组合成新列,同时保留行(不是简单的分组)
我有以下的熊猫数据框:
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
任何帮助将不胜感激!
答
我认为你需要sort_values
先用reset_index
为漂亮的单调唯一索引,然后用abs
和sum
transform
:
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
答
假设你有两个正数:
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
如果是50, 30,(不是负面的):-) – Wen
我需要它与否定,这就是为什么我给了这个确切的例子... – Tom
@汤姆 - 所以可以使用'abs'? – jezrael