我有两个数据框,看起来像这样:
apparentTemperature_id
| id | apparentTemperature | apparentTemperatureMin | ... |
| 1 | 13 | 9 | ... |
| 2 | 48 | 40 | ... |
| 3 | 32 | 24 | ... |
| ...| ... | ... | ... |
-----------------------------------------------------------
temp
| apparentTemperature | apparentTemperatureMin | ... |
| 32 | 24 | ... |
| 13 | 9 | ... |
| 32 | 24 | ... |
| ... | ... | ... |
这是我当前的代码:
temp = pd.concat([apparentTemperature_df, temperature_df], axis=1)
temp_list = []
for i in range (len(temp)):
for k in range (len(apparentTemperature_id)):
if temp.iloc[i,0:9].equals(apparentTemperature_id.iloc[k,1:10]):
temp_list.append(apparentTemperature_id.iloc[k,0])
break
我想根据apparentTemperature_id
为临时数据分配id。总共有10列要比较。
由于数据有600,000多行,并且有1000多个id,因此上面的代码需要很长时间才能完成。有更快的方法吗?
我认为您可以使用要比较的列列表将两个数据框合并在一起。这应该比使用.iloc
遍历两个数据帧并比较列中的值要高效得多。
我已经修改了你的apparentTemperature_id
和temp
的样品,所以有一些行,其中的列是不一样的。
apparentTemperature_id = pd.DataFrame({'id':[1,2,3],'apparentTemperature':[13,48,32],'apparentTemperatureMin':[9,40,24]})
apparentTemperature_id['id'] = apparentTemperature_id['id'].astype(str)
# id apparentTemperature apparentTemperatureMin
# 0 1 13 9
# 1 2 48 40
# 2 3 32 24
temp = pd.DataFrame({'apparentTemperature':[13,48,32],'apparentTemperatureMin':[9,40,0]})
# apparentTemperature apparentTemperatureMin
# 0 13 9
# 1 48 40
# 2 32 0
然后我们可以在['apparentTemperature','apparentTemperatureMin']
上合并,以便在两个数据框之间比较这些列中的值,并使用参数how='inner'
,以便我们只保留这些列中的值相同的行(在合并的数据框中,只有id 1和2被保留,因为它们在我们比较的列中共享所有相同的值)。在您的示例中,您将合并要比较的所有10列。
apparentTemperature_id.merge(temp, on=['apparentTemperature','apparentTemperatureMin'], how='inner')
# id apparentTemperature apparentTemperatureMin
# 0 1 13 9
# 1 2 48 40