【问题标题】: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遍历字典列表并 1) 将流值与流列元素进行比较 2) 如果匹配,则附加一个带有数据的新列表
【发布时间】: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)。

标签: python pandas loops dictionary dataframe


【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-28
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 2019-03-02
      • 2020-07-10
      • 1970-01-01
      相关资源
      最近更新 更多