从原始数据来看,存在重复数据。不同数据库的重复项必须连接到前一个表的后面。有没有办法通过比较数据将两个表合并为一个表,如下所示?
从使用 drop.duplicates 和 duplicated 的原始数据中,我得到两个表并想使用字典对它们进行比较,但是通过将行作为两个表中的字典,每个字典中的键都是相同的,但我不能将它们合并在一起。
这是给出的原始数据
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”的顺序并不重要,但数据库必须按字母顺序从左到右排序。
最佳答案
我认为最简单的方法是使用 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
关于python - 如何在 DataFrame 中连接附近重复的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55715334/