获取python数据帧中某些列值的最大绝对值
给定数据帧获取python数据帧中某些列值的最大绝对值,python,pandas,dataframe,Python,Pandas,Dataframe,给定数据帧df: year num 1982 -4 1983 -7 1983 5 1984 -1 1986 0 ... 2008 47 2009 -5 2009 -2 2009 17 2009 84 我已按年对df进行排序,然后按升序对num进行排序,如图所示。我的目标是找到每个年num的最大绝对值,然后创建一个新列new,解释为num除以行所在年num的最大绝对值 因此,df的第一个
df
:
year num
1982 -4
1983 -7
1983 5
1984 -1
1986 0
...
2008 47
2009 -5
2009 -2
2009 17
2009 84
我已按年
对df
进行排序,然后按升序对num
进行排序,如图所示。我的目标是找到每个年num
的最大绝对值,然后创建一个新列new
,解释为num
除以行所在年num
的最大绝对值
因此,df的第一个和最后五个值应如下所示:
year num newnum
1982 -4 -1
1983 -7 -1
1983 5 -0.7143
1984 -1 -1
1986 0 0
...
2008 47 1
2009 -5 -0.0595
2009 -2 -0.0238
2009 17 0.2024
2009 84 1
我考虑单独创建一个绝对值列来进行列比例划分,例如
df['absnum'] = df.num.abs()
然后找到它的max
值,但是我遇到了一个问题,无法按year
对那些absnum
值进行分类。是否有一种有效的方法来计算每行的newnum
?用于通过除以获得最大绝对值:
新增栏目:
df['absnum'] = df.num.abs()
df['new'] = df['num'].div(df.groupby('year')['absnum'].transform('max'))
print (df)
year num absnum new
0 1982 -4 4 -1.000000
1 1983 -7 7 -1.000000
2 1983 5 5 0.714286
3 1984 -1 1 -1.000000
4 1986 0 0 NaN
5 2008 47 47 1.000000
6 2009 -5 5 -0.059524
7 2009 -2 2 -0.023810
8 2009 17 17 0.202381
9 2009 84 84 1.000000
最后,如有必要,用0
替换缺少的值:
df['new'] = df['new'].fillna(0)
df['new'] = df['new'].fillna(0)