【发布时间】:2021-08-01 21:43:43
【问题描述】:
我认为这里会有一个简单的解决方案,但我错过了一些东西......
我有两个数据框。一个原始的,第二个带有一些处理过的数据。第二个数据框中的列名与第一个数据框中的列部分匹配。有多个列名部分匹配。来自第二个数据帧的多个列需要重新插入到相同位置,在原始数据帧中具有一个部分匹配的列名(因此,数据帧的大小自然会增加)。下面复制了数据和预期输出的示例。它需要是“程序化的”,因为我有很多这些列/实例。
任何 cmets 都对我很有帮助。
非常感谢!
原始数据
df1 = {'id': ['1','2','3','4'],
'ab': ['1', '2', '3', '4'],
'xy': ['1', '2', '3','4'],
'cd': ['1', '2', '3','4'],
'ef':['1', '2', '3', '4'],
'lm':['1', '2', '3', '4'],
'fa':['1', '2', '3', '4'] }
df1 = pd.DataFrame(df1, columns = ['id','ab', 'xy', 'cd', 'ef', 'lm', 'fa'])
处理过的数据
df2 = {'id': ['1','2','3','4'],
'ab? op': ['green', 'red', 'blue', 'None'],
'ab? 1': ['red', 'yellow', 'None', 'None'],
'cd': ['L', 'XL', 'M','L'],
'efab? cba' : ['husband', 'wife', 'husband', 'None'],
'efab? 1':['son', 'grandparent', 'son', 'None'],
'efab? 2':['None', 'son', 'None', 'None'],
'fab? 4':['9', '10', '5', '3'],
'fab? po':['England', 'Scotland', 'Wales', 'NA'] }
df2 = pd.DataFrame(df2, columns = ['id','ab? op', 'ab? 1', 'cd', 'efab? cba', 'efab? 1', 'efab? 2', 'fab? 4', 'fab? po'])
预期输出
e = {'id': ['1','2','3','4'],
'ab? op': ['green', 'red', 'blue', 'None'],
'ab? 1': ['red', 'yellow', 'None', 'None'],
'xy': ['1', '2', '3','4'],
'cd': ['L', 'XL', 'M','L'],
'lm':['1', '2', '3', '4'],
'efab? cba' : ['husband', 'wife', 'husband', 'None'],
'efab? 1':['son', 'grandparent', 'son', 'None'],
'efab? 2':['None', 'son', 'None', 'None'],
'fab? 4':['9', '10', '5', '3'],
'fab? po':['England', 'Scotland', 'Wales', 'NA'] }
expected = pd.DataFrame(e, columns = ['id','ab? op', 'ab? 1', 'xy', 'cd', 'lm', 'efab? cba', 'efab? 1', 'efab? 2', 'fab? 4', 'fab? po'])
【问题讨论】:
标签: python pandas rename string-matching partial