我想在我的数据框 (Global_Dataset) 上创建一个基于另一个数据框 (List_Data) 的新列 (Col_val)。 我需要一个更快的代码,因为我有一个包含 200 万个样本的数据集,而 List_data 包含 50000 个样本。
Col_Val 必须根据 Col_Key
包含列 Value 的值列表数据:
id Key Value
1 5 0
2 7 1
3 9 2
全局数据集:
id Col_Key Col_Val
1 9 2
2 5 0
3 9 2
4 7 1
5 7 1
6 5 0
7 9 2
8 7 1
9 9 2
10 5 0
我试过这段代码,但需要很长时间才能执行。有没有其他更快的方法来实现我的目标?
Col_Val = []
for i in range (len(List_Data)):
for j in range (len(Global_Data)):
if List_Data.get_value(i, "Key") == Global_Data.get_value(j, 'Col_Key') :
Col_Val.append(List_Data.get_value(i, 'Value'))
Global_Data['Col_Val'] = Col_Val
PS:我已经尝试过 loc 和 iloc 而不是 get_value 但它工作起来很慢
最佳答案
试试这个:
data_dict = {key : value for key, value in zip(List_Data['Key'], List_Data['Value'])}
Global_Data['Col_Val'] = pd.Series([data_dict[key] for key in Global_Data['Col_Key']])
我不知道你的机器需要多长时间处理你需要处理的数据量,但它应该比你现在使用的更快。
您还可以使用 data_dict = {row['Key'] : row['Value'] for _, row in list_data.iterrows()}
生成字典,但在我的机器上比我慢上面提出。
它的工作假设是 Global_Data['Col_Keys']
中的所有键都存在于 List_Data['Key']
中,否则你将得到一个 按键错误
。
关于python - 如何快速将值从一个数据帧复制到另一个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56044427/