如果所有10列值都与另一个数据帧相同,则为该数据帧分配ID



我有两个数据框,看起来像这样:

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_idtemp的样品,所以有一些行,其中的列是不一样的。

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

相关内容

  • 没有找到相关文章

最新更新