从原始数据来看,有重复的数据。具有不同数据库的重复项必须与前一个表的后面相结合。是否有任何方法可以通过比较数据之间的关系将两个表合并为一个表,如下所示?
使用drop.duplicates和重复的原始数据,我得到了两个表,并希望使用字典对其进行比较,但是通过在两个表中将行作为字典进行比较,每个字典中的键都是相同的,我无法将它们合并在一起。
这是给出的原始数据
DB TITLE ISSN IBSN
0 M a 1 NaN
1 M d 1 NaN
2 M c 1 NaN
3 N b 1 NaN
4 N a 1 NaN
5 N d 1 NaN
6 O c 1 NaN
7 O e 1 NaN
8 O a 1 NaN
9 O b 1 NaN
通过使用drop_duplicates和重复:
DB TITLE ISSN IBSN DB TITLE ISSN IBSN
0 M a 1 NaN 0 N a 1 NaN
1 M d 1 NaN 1 N d 1 NaN
2 M c 1 NaN 2 O c 1 NaN
3 N b 1 NaN 3 O a 1 NaN
4 O e 1 NaN 4 O b 1 NaN
这是我从行中获得的字典:
{'DB': 'N', 'TITLE': 'a', 'ISSN': 1, 'IBSN': 'NaN'}
{'DB': 'M', 'TITLE': 'a', 'ISSN': 1, 'IBSN': 'NaN'}
我希望输出是
DB TITLE ISSN IBSN DB TITLE ISSN ISBN DB TITLE ISSN IBSN
0 M a 1.0 NaN N a 1.0 NaN O a 1.0 NaN
1 N b 1.0 NaN O b 1.0 NaN NaN NaN NaN NaN
2 M d 1.0 NaN N d 1.0 NaN NaN NaN NaN NaN
3 M c 1.0 NaN O c 1.0 NaN NaN NaN NaN NaN
4 O e 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
该列中“ TITLE”的顺序并不重要,但是数据库必须按从左到右的字母顺序进行排序。
答案 0 :(得分:2)
我认为最简单的方法是使用cumcount
分隔子组,然后将concat
与join='outer'
结合使用:
grps = [
g.set_index('TITLE') for _, g in df.groupby(df.groupby('TITLE').cumcount())
]
pd.concat(grps, join='outer', axis=1, sort=True)
DB ISSN IBSN DB ISSN IBSN DB ISSN IBSN
a M 1 NaN N 1.0 NaN O 1.0 NaN
b N 1 NaN O 1.0 NaN NaN NaN NaN
c M 1 NaN O 1.0 NaN NaN NaN NaN
d M 1 NaN N 1.0 NaN NaN NaN NaN
e O 1 NaN NaN NaN NaN NaN NaN NaN
如果您还需要“ TITLE”,请将set_index
与drop=False
一起使用:
grps = [
g.set_index('TITLE', drop=False)
for _, g in df.groupby(df.groupby('TITLE').cumcount())
]
pd.concat(grps, join='outer', axis=1, sort=True)
DB TITLE ISSN IBSN DB TITLE ISSN IBSN DB TITLE ISSN IBSN
a M a 1 NaN N a 1.0 NaN O a 1.0 NaN
b N b 1 NaN O b 1.0 NaN NaN NaN NaN NaN
c M c 1 NaN O c 1.0 NaN NaN NaN NaN NaN
d M d 1 NaN N d 1.0 NaN NaN NaN NaN NaN
e O e 1 NaN NaN NaN NaN NaN NaN NaN NaN NaN