当Once列在特定范围内时,规范化Pandas数据框中的列

68bkxrlz  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(81)

我有一个Pandas的数据框,其中包含我的实验数据。它看起来像这样:

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的帖子中也介绍的Normalize的想法。因此,我需要找到我的数据的最大值和最小值我是这样的

minBE = self.data[EXP_DATA].min()
    maxBE = self.data[EXP_DATA].max()


现在,我想找出该列的最大值和最小值,但仅当“列”BE在某个范围内时,才能找到“列”EXP_DATA中的Range。因此,本质上,我只想在特定的X范围内对数据进行归一化。

解答

多亏了米洛给我的解决方案,我现在使用了这个函数:

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参数的情况下调用该函数,则传递给该函数的数据的整个Range将从0到1进行缩放。
谢谢您的帮助!

9q78igpj

9q78igpj1#

您可以使用布尔索引。例如,要在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()

字符串

相关问题