按第一列中的值对数据分组

2024-04-25 08:33:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图根据第一列的值对2列对象中的数据进行分组。我需要这个数据在一个列表中,这样我可以排序后。我用snmp在大量机器上获取接口数据。在这个例子中,我有两个接口。我需要数据分组接口最好在一个列表。你知道吗

我获取的数据位于对象项中:

for i in item:
   print i.oid, i.val

ifDescr lo
ifDescr eth0
ifAdminStatus 1
ifAdminStatus 1
ifOperStatus 1
ifOperStatus 0

我想在列表中按第一列中的值对数据进行排序,如下所示:

我想在一个列表中得到这些数据,所以它看起来像这样:

列表=[[lo,1,1],[eth0,1,0]]

我的解决方案又脏又长,我很不好意思把它贴在这里,所以非常感谢您的帮助。

这是我的解决方案,让你更好地了解我在说什么。我所做的是根据项目.oid,然后通过cpu列表进行迭代,并将其与基于的内存和名称进行比较项目iid. 最后,我在cpu列表中有了所有的数据,其中每个接口都是列表中的一个元素。这个解决方案有效,但对我的需要来说太慢了。你知道吗

cpu=[]
memory=[]
name=[]

for item in process:
    if item.oid=='ifDescr':
        cpu.append([item.iid, int(item.val)])
    if item.oid=='ifAdminStatus':
        memory.append([item.iid, int(item.val)])
    if item.oid=='ifOperStatus':
        name.append([item.iid, item.val])


for c in cpu:
    for m in memory:
        if m[0]==c[0]:
            c.append(m[1])
    for n in name:
        if n[0]==c[0]:
            c.append(n[1])
cpu=sorted(cpu,key=itemgetter(1),reverse=True) #sorting is easy

有没有一种简单快捷的方法?限制因素是我在一个2列对象中获得key=data值的数据。你知道吗


Tags: 数据对象in列表forifvalcpu
2条回答

我不确定是否遵循您的排序,因为我看不到任何顺序,但要进行分组,您可以使用dict分组oid对重复键使用defaultdict

data = """ifDescr lo
ifDescr eth0
ifAdminStatus 1
ifAdminStatus 1
ifOperStatus 1
ifOperStatus 0"""

from collections import defaultdict

d = defaultdict(list)
for line in data.splitlines():
    a, b = line.split()
    d[a].append(b)
print((d.items()))
[('ifOperStatus', ['1', '0']), ('ifAdminStatus', ['1', '1']), ('ifDescr', ['lo', 'eth0'])]

使用代码只需使用以下属性:

for i in item:
   d[i.oid].append(i.val)

熊猫是处理数据的好方法。下面是一个简单的示例代码。查看官方网站了解更多信息。你知道吗

# Python script using Pandas and Numpy
from pandas import DataFrame
from numpy import random

# Data with the dictionary keys defining the columns
data_dictionary = {'a': random.random(5), 
                   'b': random.random(5)}
# Make a data frame 
data_frame = DataFrame(data_dictionary)
print(data_frame)

# Return an new data frame with a sorted first column
data_frame_sorted = data_frame.sort_index(by='a')
print(data_frame_sorted)

如果安装了numpy和pandas,则应该运行此操作。如果你对安装pandas没有任何线索,那就去买“anacondapython发行版”

相关问题 更多 >