Python 关于筛选与其他列表对应的列表项的建议
我有四份名单,长度约为200000。第一个列表包含1到24之间的小时值,下面是一个示例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
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小时的平均缺勤率和平均入住率。你能给我举个简单的例子吗?我完全是熊猫的新手,我不知道按熊猫分组时的数据结构是什么样的。请给出答案。