首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据一列中的最大值和第二列中相应的值创建新的数据

根据一列中的最大值和第二列中相应的值创建新的数据
EN

Stack Overflow用户
提问于 2018-10-14 16:02:32
回答 1查看 912关注 0票数 0

我通过从源(网络无线控制器)提取数据来创建数据。

Dataframe是根据我构建的字典创建的。这基本上就是我正在做的事情(一个显示结构的示例--而不是实际的数据):

代码语言:javascript
运行
复制
df = pd.DataFrame({'AP-1': [30, 32, 34, 31, 33, 35, 36, 38, 37],
                   'AP-2': [30, 32, 34, 80, 33, 35, 36, 38, 37],
                   'AP-3': [30, 32, 81, 31, 33, 101, 36, 38, 37],
                   'AP-4': [30, 32, 34, 95, 33, 35, 103, 38, 121],
                   'AP-5': [30, 32, 34, 31, 33, 144, 36, 38, 37],
                   'AP-6': [30, 32, 34, 31, 33, 35, 36, 110, 37],
                   'AP-7': [30, 87, 34, 31, 111, 35, 36, 38, 122],
                   'AP-8': [30, 32, 99, 31, 33, 35, 36, 38, 37],
                   'AP-9': [30, 32, 34, 31, 33, 99, 88, 38, 37]}, index=['1', '2', '3', '4', '5', '6', '7', '8', '9'])


df1 = df.transpose()

这个很好用。

关于数据的注意。第1栏、第2栏、第3栏为“相关”栏。他们一起去。第4栏、第5栏、第6栏和第7栏、第8栏和第9栏也是如此。

第1、4、7列是客户端计数。列2,5,8是5 Ghz频谱上的信道利用率。列3,6,9是2.4 Ghz频段的信道利用率。

基本上,我每隔5分钟阅读一次。以上为三读,每隔5分钟一次。

我想要的是两个新的dataframes,每个列两列,构造如下:

检查5 Ghz列(这里是2,5,8)。它的最高值变成了新的dataframe中的第1列。第2列是与值最高的5 Ghz列相关的client count列的值。换句话说,如果列2是第2、5、8列中最高的,那么我希望第1列中的值是第二列的新dataframe中的值。如果第8列中的值最高,那么我也想在第7列中提取值,我希望新的数据格式中的索引与原始的- AP名称相同。

我想要对'main‘dataframe中的所有行执行此操作。我想要两个新的数据格式--所以我将对5 Ghz列和2.4列(第3、6、9列)重复这个精确的过程--也获取新数据中第二列对应的最高客户计数值。

我试过的是:

首先,我将主数据分解为三个: df1有所有的客户机计数列,df2有5 Ghz,df3有2.4info,使用如下:

代码语言:javascript
运行
复制
            # create client count only dataframe
            df_cc = df[df.columns[::3]]
            print(df_cc)
            print()

            # create 5Ghz channel utilization only dataframe
            df_5Ghz = df[df.columns[1::3]]
            print(df_5Ghz)
            print()

            # create 2.4Ghz channel utilization only dataframe
            df_24Ghz = df[df.columns[2::3]]
            print(df_24Ghz)
            print()

这个很管用。

我以为我可以引用主数据,但我不知道如何引用。

然后我发现了这个

extract column value based on another column pandas dataframe

查询选项看起来很好,但我不知道值。我需要首先发现2.4和5 Ghz列的最大值,然后获取相应的客户端计数值。这就是我第一次创建只包含2.4和5 Ghz值的dataframe的原因,我认为首先可以得到每一行的最大值,然后对主数据帧进行查找(或者只使用我创建的客户端计数),但我不知道如何实现这个想法。

如能提供任何协助,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-14 18:54:34

你可以从三个步骤得到你想要的:

代码语言:javascript
运行
复制
# connection between columns
mapping = {'2': '1', '5': '4', '8': '7'}

# 1. column with highest value among 5GHz values (pandas series)
df2 = df1.loc[:, ['2', '5', '8']].idxmax(axis=1)
df2.name = 'highest value'

# 2. column with client count corresponding to the highest value (pandas series)
df3 = df2.apply(lambda x: mapping[x])
df3.name = 'client count'

# 3. build result using 2 lists of columns (pandas dataframe)
df4 = pd.DataFrame(
    {df.name: [
         df1.loc[idx, col]
         for idx, col in zip(df.index, df.values)]
     for df in [df2, df3]},
    index=df1.index)
print(df4)

输出:

代码语言:javascript
运行
复制
      highest value  client count
AP-1             38            36
AP-2             38            36
AP-3             38            36
AP-4             38           103
AP-5             38            36
AP-6            110            36
AP-7            111            31
AP-8             38            36
AP-9             38            88

我想,如果不使用内置的python数据类型(字典和列表),如果不使用pandas,那么解决这个问题会更容易(而且计算速度更快)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52804535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档