我有两个不同大小和不同列数的DataFrame,例如:
DF1:
index col1 col2 col3
1 AA A12 SH7B
2 Ac DJS 283
3 ZH 28S 48d
DF2:
index col1 col2 col3 col4
2 AA cc2 SH7B hd5
7 Ac DJS 283,dhb re
10 ZH 28S SJE,48d 385d
23 3V4 38D 350,eh4 sm4
44 S3 3YE 032,she 3927
因此索引不同。并且在第一个数据帧中有一些独特的数据组合,这与其他数据帧类似,我想找到它们。所以我想迭代第二个数据帧的行并找到每行的每个数据组合(例如:( 7,Ac,DJS,283,re)和(7,Ac,DJS,dhb,re)是索引7的两种组合,因为存在具有多于一个值的列)并将其与第一数据帧进行比较'如果第二个数据帧中存在相同的组合,则将其打印出来。
result:
1 Ac DJS 283
2 ZH 28S 48d
谢谢
答案 0 :(得分:0)
首先需要从数据帧2 拆分 col3 ,然后将其与数据帧1合并;要拆分数据框2的 col3 ,一种常见的方法是在使用numpy.repeat
时将col3拆分并展平,以使其他列的长度相等:
import pandas as pd
import numpy as np
from itertools import chain
# count how many repeats are needed for other columns based on commas
repeats = df2.col3.str.count(",") + 1
# repeat columns except for col3, split and flatten col3 and merge it back with df1
(df2.drop('col3', 1).apply(lambda col: np.repeat(col, repeats))
.assign(col3 = list(chain.from_iterable(df2['col3'].str.split(','))))
.merge(df1))
# col1 col2 col4 col3
#0 Ac DJS re 283
#1 ZH 28S 385d 48d