[英]Normalize columns in pandas data frame while once column is in a specific range
我在熊猫中有一个数据框,其中包含我的实验数据。 看起来像这样:
KE BE EXP_DATA COL_1 COL_2 COL_3 .....
10 1 5 1 2 3
9 2 . . . .
8 3 . .
7 4
6 5
.
.
不使用列KE。 BE是x轴的值,所有其他列是y轴的值。 为了进行规范化,我在Michael Aquilina的帖子中的规范化中也介绍了这种想法。 因此,我需要找到我的数据的最大值和最小值。 我这样做
minBE = self.data[EXP_DATA].min()
maxBE = self.data[EXP_DATA].max()
现在,我想查找此列的最大值和最小值,但仅当“列” BE在某个范围内时,才查找“列” EXP_DATA中的范围。 因此,从本质上讲,我只想在某个X范围内对数据进行归一化。
解
感谢解决方案,Milo给了我我现在使用此功能:
def normalize(self, BE="Exp",NRANGE=False):
"""
Normalize data by dividing all components by the max value of the data.
"""
if BE not in self.data.columns:
raise NameError("'{}' is not an existing column. ".format(BE) +
"Try list_columns()")
if NRANGE and len(NRANGE)==2:
upper_be = max(NRANGE)
lower_be = min(NRANGE)
minBE = self.data[BE][(self.data.index > lower_be) & (self.data.index < upper_be)].min()
maxBE = self.data[BE][(self.data.index > lower_be) & (self.data.index < upper_be)].max()
for col in self.data.columns: # this is done so the data in NRANGE is realy scalled between [0,1]
msk = (self.data[col].index < max(NRANGE)) & (self.data[col].index > min(NRANGE))
self.data[col]=self.data[col][msk]
else:
minBE = self.data[BE].min()
maxBE = self.data[BE].max()
for col in self.data.columns:
self.data[col] = (self.data[col] - minBE) / (maxBE - minBE)
如果我使用参数NRANGE = [a,b]调用该函数, 并且 a和b也是我图的x极限,则在遮盖其余数据时会自动在0和1之间缩放可见的Y值。 如果在没有NRANGE参数的情况下调用该函数,则传递给该函数的数据的整个范围的范围为0 o 1。
谢谢您的帮助!
您可以使用布尔索引 。 例如,要在EXP_DATA
列中选择最大和最小值,其中BE
大于2且小于5:
lower_be = 2
upper_be = 5
max_in_range = self.data['EXP_DATA'][(self.data['BE'] > lower_be) & (self.data['BE'] < upper_be)].max()
min_in_range = self.data['EXP_DATA'][(self.data['BE'] > lower_be) & (self.data['BE'] < upper_be)].min()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.