如何用Pandas关联aoiFeatures与allFeaturesReadings得到指定结果
用Pandas关联特征与读数并生成目标格式结果
嘿,我来帮你搞定这个Pandas的关联问题!你想要的是把aoiFeatures里的每个特征和它在allFeaturesReadings中对应的读数按顺序排列,输出成183 0.03 845 0.03 853 0.01这样的格式对吧?咱们一步一步来调整代码:
核心思路
首先我们需要把allFeatures和allReadings构建成以特征值为索引的Pandas Series,这样就能通过索引直接匹配aoiFeatures里的特征,快速拿到对应的读数,最后再把特征和读数交替展平成目标格式。
修正后的完整代码
import pandas as pd import numpy as np allFeatures = [101, 179, 181, 183, 185, 843, 845, 847, 849, 851, 853, 855] allReadings = [0.03, 0.01, 0.01, 0.03, 0.03, 0.01, 0.03, 0.02, 0.07, 0.06, 0.01, 0.04] aoiFeatures = [183, 845, 853] # 1. 创建以特征为索引的读数Series,直接关联特征与读数 feature_readings = pd.Series(allReadings, index=allFeatures) # 2. 筛选aoiFeatures对应的条目(自动按索引匹配) aoi_matched = feature_readings.loc[aoiFeatures] # 3. 把特征和读数交替展平成一维序列 # 方法一:循环拼接 flattened = [] for feat, val in aoi_matched.items(): flattened.append(str(feat)) flattened.append(str(val)) # 方法二:用numpy更简洁地展平(可选) # flattened = np.column_stack((aoi_matched.index, aoi_matched.values)).ravel().astype(str) # 4. 输出目标格式 print(' '.join(flattened))
代码解释
- 构建关联Series:
pd.Series(allReadings, index=allFeatures)直接把allFeatures设为索引,allReadings作为对应值,这比用zip转字典更直观,效果是一样的——每个特征都映射到它的读数。 - 筛选目标特征:
.loc[aoiFeatures]会根据aoiFeatures里的每个值,从feature_readings中取出对应的读数,自动完成关联匹配,这一步是核心! - 展平结果:我们需要把“特征+读数”的配对依次展开成一维列表,两种方法都能实现,选你觉得顺手的就行。
- 输出格式:用
' '.join()把列表转成空格分隔的字符串,就是你要的结果啦。
原代码的问题说明
你原来的代码里用reindex和concat的方式有点绕,最后得到的是一个两列的DataFrame(特征列+读数列),而不是扁平的序列。通过上面的方法,我们直接利用Pandas的索引匹配特性,更简洁地完成了关联,还能直接生成目标格式。
内容的提问来源于stack exchange,提问作者JackedUpDBA
相关产品推荐
相关产品推荐

