Python 关于筛选与其他列表对应的列表项的建议

Python 关于筛选与其他列表对应的列表项的建议,python,pandas,zip,Python,Pandas,Zip,我有四份名单,长度约为200000。第一个列表包含1到24之间的小时值,下面是一个示例 Hour_list = [1,2,2,2,5,5,7,5,12,18,24,.....] avg_occupancy = [0,5,9,5,13,24,56,23,.....] avg_absences = [0,4,5,7,8,6,8,3,2,1.....] Room_config= ['config_a001', 'configa002', 'configa003', 'configa004', 'co

我有四份名单,长度约为200000。第一个列表包含1到24之间的小时值,下面是一个示例

Hour_list = [1,2,2,2,5,5,7,5,12,18,24,.....] 
avg_occupancy = [0,5,9,5,13,24,56,23,.....]
avg_absences = [0,4,5,7,8,6,8,3,2,1.....]
Room_config= ['config_a001', 'configa002', 'configa003', 'configa004', 'configa005'.........]
我需要为每个小时创建24个列表,list_hour1、list_Hour2等等,然后根据它们过滤其他三个列表,例如,list_Hour2应该包含数字2,而avg_ocupancy_hour_2应该具有与第一个列表中的数字2对应的索引的所有项目,这意味着avg_ocupancy_hour_2=[5,9,5,…],平均缺勤率[2=[4,5,7,…],房间配置=['configa002','configa003','configa004','configa005'…]


我认为Zip会很好,但不确定如何在这种情况下使用它

使用
Zip
defaultdict
(以及清洁等级):

从集合导入defaultdict

hour_list     = [1,2,2,2,5,5,7,5] 
avg_occupancy = [0,5,9,5,13,24,56,23]
avg_absences  = [0,4,5,7,8,6,8,3]
room_config   = ['configa001', 'configa002', 'configa003', 'configa004', 
                 'configa005', 'configa006', 'configa007', 'configa008']


class Tracker:
    def __init__(self):
        self.avg_occupancy = defaultdict(list)
        self.avg_absences  = defaultdict(list) 
        self.room_config   = defaultdict(list)

    def add(self, h, ao, aa, rc):
        self.avg_occupancy[h].append(ao)
        self.avg_absences[h].append(aa)
        self.room_config[h].append(rc)

    # Optional, of course
    def __repr__(self):
        import json
        return json.dumps(vars(self), indent=4)


t = Tracker()
for row in zip(hour_list, avg_occupancy, avg_absences, room_config):
    t.add(*row)


print(t)
产生:

{ "avg_occupancy": { "1": [0], "2": [5, 9, 5], "5": [13, 24, 23], "7": [56] }, "avg_absences": { "1": [0], "2": [4, 5, 7], "5": [8, 6, 3], "7": [8] }, "room_config": { "1": ["configa001"], "2": ["configa002", "configa003", "configa004"], "5": ["configa005", "configa006", "configa008"], "7": ["configa007"] } } { “平均入住率”:{ "1": [0], "2": [5, 9, 5], "5": [13, 24, 23], "7": [56] }, “平均缺勤率”:{ "1": [0], "2": [4, 5, 7], "5": [8, 6, 3], "7": [8] }, “房间配置”:{ “1”:[“configa001”], “2”:[“configa002”、“configa003”、“configa004”], “5”:[“configa005”、“configa006”、“configa008”], “7”:[“configa007”] } }
使用
zip
defaultdict
(以及清洁等级):

从集合导入defaultdict

hour_list     = [1,2,2,2,5,5,7,5] 
avg_occupancy = [0,5,9,5,13,24,56,23]
avg_absences  = [0,4,5,7,8,6,8,3]
room_config   = ['configa001', 'configa002', 'configa003', 'configa004', 
                 'configa005', 'configa006', 'configa007', 'configa008']


class Tracker:
    def __init__(self):
        self.avg_occupancy = defaultdict(list)
        self.avg_absences  = defaultdict(list) 
        self.room_config   = defaultdict(list)

    def add(self, h, ao, aa, rc):
        self.avg_occupancy[h].append(ao)
        self.avg_absences[h].append(aa)
        self.room_config[h].append(rc)

    # Optional, of course
    def __repr__(self):
        import json
        return json.dumps(vars(self), indent=4)


t = Tracker()
for row in zip(hour_list, avg_occupancy, avg_absences, room_config):
    t.add(*row)


print(t)
产生:

{ "avg_occupancy": { "1": [0], "2": [5, 9, 5], "5": [13, 24, 23], "7": [56] }, "avg_absences": { "1": [0], "2": [4, 5, 7], "5": [8, 6, 3], "7": [8] }, "room_config": { "1": ["configa001"], "2": ["configa002", "configa003", "configa004"], "5": ["configa005", "configa006", "configa008"], "7": ["configa007"] } } { “平均入住率”:{ "1": [0], "2": [5, 9, 5], "5": [13, 24, 23], "7": [56] }, “平均缺勤率”:{ "1": [0], "2": [4, 5, 7], "5": [8, 6, 3], "7": [8] }, “房间配置”:{ “1”:[“configa001”], “2”:[“configa002”、“configa003”、“configa004”], “5”:[“configa005”、“configa006”、“configa008”], “7”:[“configa007”] } }
是的,这就像…正是为什么数据帧是一种东西

Hour_list = [1,2,2,2]
avg_occupancy = [0,5,9,5]
avg_absences = [0,4,5,7]
Room_config= ['config_a001', 'configa002', 'configa003', 'configa004']
把它们放在熊猫身上:

import pandas as pd
data = pd.DataFrame(dict(Hour_list = Hour_list, avg_occupancy = avg_occupancy, avg_absences = avg_absences, Room_config = Room_config))
分组:

hour_groups = data.groupby('Hour_list')
现在,您可以做任何事情—您可以计算摘要统计数据,或者只是在所有时间内迭代:

for hour, hour_data in hour_groups:
    do_stuff(hour_data)
对于您的后续问题,您可以采用以下方法进行计算:

mean_data = hour_groups[['avg_occupancy', 'avg_absences']].agg('mean')
mean_data['count'] = hour_groups['avg_occupancy'].count()
然后,您可以使用
.loc
和逻辑测试选择索引为9(即9小时)的行

mean_data.loc[mean_data.index == 9, :]

,:
部分告诉pandas返回所有符合
平均值_data.index==9
测试的行的所有列。

是的,这就像..正是为什么数据帧是一种东西

Hour_list = [1,2,2,2]
avg_occupancy = [0,5,9,5]
avg_absences = [0,4,5,7]
Room_config= ['config_a001', 'configa002', 'configa003', 'configa004']
把它们放在熊猫身上:

import pandas as pd
data = pd.DataFrame(dict(Hour_list = Hour_list, avg_occupancy = avg_occupancy, avg_absences = avg_absences, Room_config = Room_config))
分组:

hour_groups = data.groupby('Hour_list')
现在,您可以做任何事情—您可以计算摘要统计数据,或者只是在所有时间内迭代:

for hour, hour_data in hour_groups:
    do_stuff(hour_data)
对于您的后续问题,您可以采用以下方法进行计算:

mean_data = hour_groups[['avg_occupancy', 'avg_absences']].agg('mean')
mean_data['count'] = hour_groups['avg_occupancy'].count()
然后,您可以使用
.loc
和逻辑测试选择索引为9(即9小时)的行

mean_data.loc[mean_data.index == 9, :]

,:
部分告诉pandas返回所有符合
平均值_data.index==9
测试的行的所有列。

我向您提供了以下代码;它基于随机数据并使用pandas库,还将为您提供更大的灵活性:

import pandas as pd
import numpy as np

hours = np.arange(1, 25)
data = {'hours': [hours[np.random.randint(low=0, high=24)] for i in np.arange(1000)],
        'occupancy': np.random.randint(low=0, high=100, size=1000),
        'absences' : np.random.randint(low=0, high=10, size= 1000)
       }
df = pd.DataFrame(data=data)

# Extract data for hour == 7
df[df['hours'] == 7]

我向您提出了以下代码;它基于随机数据并使用pandas库,还将为您提供更大的灵活性:

import pandas as pd
import numpy as np

hours = np.arange(1, 25)
data = {'hours': [hours[np.random.randint(low=0, high=24)] for i in np.arange(1000)],
        'occupancy': np.random.randint(low=0, high=100, size=1000),
        'absences' : np.random.randint(low=0, high=10, size= 1000)
       }
df = pd.DataFrame(data=data)

# Extract data for hour == 7
df[df['hours'] == 7]

这些清单都(准确地说)是相同的长度,对吗?列表都是相同的长度吗?每个列表中的元素N对应于任何东西的相同度量吗?@jedwards,对,列表是相同的length@CJ59是的,列表长度相同,所有四个列表中与所有度量值相对应的N元素都包含在内。为什么需要这些列表?您标记了
pandas
so根据您打算做什么,列表可能是完全不必要的,因为您可以通过
.groupby('Hour_list')
来聚合每小时的所有内容。列表是全部(准确的)相同的长度,对吗?列表都是相同的长度吗?每个列表中的元素N对应于任何东西的相同度量吗?@jedwards,对,列表是相同的length@CJ59是的,列表长度相同,所有四个列表中与所有度量值相对应的N元素都包含在内。为什么需要这些列表?您标记了
pandas
so根据您打算做什么,列表可能完全不必要,因为您可以只使用
.groupby('Hour\u list')
汇总每小时的所有数据。超级!快速提问,我如何按小时访问列表中的数字,例如,我需要知道9小时的平均缺勤率和平均入住率。你能给我举个简单的例子吗?我对熊猫完全是个新手,我不知道按熊猫分类时数据结构是什么样子的回答这个问题。超级!快速问题,我如何按小时访问列表中的数字,例如,我需要知道第9小时的平均缺勤率和平均入住率。你能给我举个简单的例子吗?我完全是熊猫的新手,我不知道按熊猫分组时的数据结构是什么样的。请给出答案。