遍历字典列表并 1) 将流值与流列元素进行比较 2) 如果匹配,则附加一个带有数据的新列表

Posted

技术标签:

【中文标题】遍历字典列表并 1) 将流值与流列元素进行比较 2) 如果匹配,则附加一个带有数据的新列表【英文标题】:loop through a dictionary list and 1) compare a flow value to the flow column element 2) if it matches then append a new list with data 【发布时间】:2019-03-12 08:20:59 【问题描述】:

我有一个数据框

Sensor_Data_df="Sensor" :[2306,2305,2304,2303,2302 ], "Time" :   [3.06,5.17,6.89,6.83,6.83], "Flow": [60,69,66,104,60]  

我需要遍历一个列表并将流值与流列元素进行比较,如果匹配,则将传感器数据附加到一个新列表中。有数千行数据,但只有 127 个流。所以看起来嵌套循环似乎很合适,但我是 pandas 和 Python 的新手。

目标是创建一个新的字典列表如下:

flows_df="60":[2306,2302],"66":[2304],"69":[2305],"104":[2303]

我需要这样的东西,但无法获得 if 语句,因此我可以比较一个值:

dfc = pd.DataFrame('A':['aaa','bbb','ccc'],'B':[1,2,3])
print(dfc)

numrows=len(dfc.loc[:,'A'])

print("The number of elements is " + str(numrows))

z_list=[]
ilist=[0,1,2]
i=0
for i in range(len(dfc['A'])):
#   if dfc[i,'A']==ilist.value()

z_list.append(dfc.loc[:,'B'])

print("____")
print(z_list)

【问题讨论】:

您能否提供一个给定输出所需输出的示例?就目前而言,很难看出dfcSensor_Data_df 的关系如何,并且根据您的描述,当您提供与多个Flow 值相对应的元素时,尚不清楚预期的结果是什么(对于您给定的示例,这将是 60)。 【参考方案1】:

您可以通过在流列上使用.isin() 来测试ilist 中的流,而不是循环遍历DataFrame(效率低下,通常在使用pandas 时应避免)。

在您的示例中,A 列中的相关值可以这样提取:

dfc.loc[dfc['B'].isin(ilist), 'A']

【讨论】:

【参考方案2】:

如果你让df = pd.DataFrame(Sensor_Data_df),那么你可以这样做

df.groupby('Flow').Sensor.apply(list).to_dict()

对于您的示例数据:

In [164]: df
Out[164]:
   Sensor  Time  Flow
0    2306  3.06    60
1    2305  5.17    69
2    2304  6.89    66
3    2303  6.83   104
4    2302  6.83    60

In [165]: df.groupby('Flow').Sensor.apply(list).to_dict()
Out[165]: 60: [2306, 2302], 66: [2304], 69: [2305], 104: [2303]

一个可能也适合您的数据大小的纯 Python 解决方案(除非是紧密循环的一部分)并为您节省对 pandas 的依赖

from collections import defaultdict

sensors_by_flow = defaultdict(list)
for flow, sensor in zip(Sensor_Data_df['Flow'], Sensor_Data_df['Sensor']):
    sensors_by_flow[flow].append(sensor)

【讨论】:

以上是关于遍历字典列表并 1) 将流值与流列元素进行比较 2) 如果匹配,则附加一个带有数据的新列表的主要内容,如果未能解决你的问题,请参考以下文章

python:遍历列表并用相应的字典值替换元素

python基础之数据类型的比较

组合数据类型练习

分别定义字符串,列表,元组,字典,集合,并进行遍历

字典对比:字典式元素组成的列表进行对比,如同键,值相减

python循环遍历字典元素问题求指教