我有两个数据帧。正如您所看到的,函数正确地合并了它,但它是错误的。因为carid必须是唯一的,并且不能分配两次。我怎样才能解决这个问题?它可以在一个数据帧中出现多次,但在两个数据记录中必须保持唯一。因此Carid = 1 = Mercedes-benz
在所有数据记录中,而非Cardid = 1 = Mercedes-Benz & Citroen
import pandas as pd
d = {'Carid ': [1, 2, 3, 1], 'Carname': ['Mercedes-Benz', 'Audi', 'BMW', 'Mercedes-Benz'], 'model': ['S-Klasse AMG 63s', 'S6', 'X6 M-Power', 'Maybach']}
df = pd.DataFrame(data=d)
display(df.head())
d2 = {'Carid ': [4, 1, 5], 'Carname': ['VW', 'Citroen', 'Opel'], 'model': ['GTI', 'S', 'Corsa']}
df2 = pd.DataFrame(data=d2)
display(df2.head())
dfs = []
dfs.append(df)
dfs.append(df2)
pd.concat(dfs)
我想要什么
方法1
如果您不介意将键更改为浮动,第一种方法是使用
cumcount
递增方法2使用字典的功能性方法
假设
函数的逻辑是基于每个数据帧有一个唯一的
carid
来预测的您的ID是按顺序排列的,因此使用}生成数字最有意义。如果您有一个carid
max
{[1,2,3,200]
列表,这可能会生成非序列号这将为雪铁龙生成一个新的}唯一的
Carid
{201
,因为200
的ID已经存在,并且由汽车制造商拥有作用
行动中
测试额外的数据帧
一种可能的方法是在合并之前进行一些数据处理
您可以考虑通过较小的数据文件,并查看^ {CD1>}的值是冲突的。然后为这些应用新的唯一值
我想到了这一点,但是可以对其进行大量优化:
注意,我确实将列名从
Carid
更改为Carid
完成此操作后,所有车辆都应该有unqiue ID,这意味着您可以使用concat合并两个数据帧
我的票到了。请注意,如果可以用新的i=unique id替换df和df2中的Carid,则会容易得多。但继续回答这个问题,我们开始吧
首先,我们为第一个df在carname和carid之间创建一个映射
cm
然后,我们对第二个df执行相同的操作
然后,主要的动作是,组合两个映射,保留原始ID,除非发生冲突,在这种情况下,我们分配唯一ID
现在,cm每个肉身都有唯一的id,保留最初使用的id,除非它们发生冲突:
现在重新映射ID
最后将它们结合在一起
结果是
相关问题 更多 >
编程相关推荐