【发布时间】:2018-10-15 02:54:34
【问题描述】:
我有一个通过从源(网络无线控制器)提取数据创建的数据帧。
Dataframe 是根据我构建的字典创建的。这基本上就是我正在做的事情(显示结构的示例 - 不是实际的数据框):
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 分钟为间隔的三个读数。
我想要的是两个新的数据框,每列两列,构造如下:
检查 5 Ghz 列(这里是 2、5、8)。具有最高值的成为新数据框中的第 1 列。第 2 列将是与具有最高值的 5 Ghz 列相关的客户端计数列的值。换句话说,如果第 2 列是第 2、5、8 列中的最高值,那么我希望第 1 列中的值成为第二列的新数据框中的值。如果第 8 列中的值最高,那么我还想提取第 7 列中的值。我希望新数据帧中的索引与原始 AP 名称相同。
我想对“主”数据框中的所有行执行此操作。我想要两个新的数据帧——所以我将对 5 Ghz 列和 2.4 列(第 3、6、9 列)重复这个确切的过程——同时为新数据帧中的第二列获取相应的最高客户端计数值。
我尝试过的:
首先,我将主数据框分成三部分:df1 包含所有客户端计数列,df2 包含 5 Ghz,df3 包含 2.4 信息,使用如下:
# 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 值的数据帧,我认为我可以先获取每行的最大值,然后在主数据帧上进行查找(或使用我创建的仅客户端计数数据帧),但我只是不知道如何实现这个想法。
任何帮助将不胜感激。
【问题讨论】:
标签: python-3.x pandas dataframe