比较两个不同大小的数据帧中的每个元素,并在pandas中添加或删除单词

Yix*_*ang 2 python string dataframe pandas

我有一个关于pandas dataframe操作的问题

假设我有两个不同大小的数据帧(它们具有相同的行数,但没有相同的列大小

a =pd.DataFrame({"code1":['A','B','C','D'],"code2":['E','F','G','H']})
b= pd.DataFrame({"code1":['A1','B','C','D'],"code2":['E','F','G','N'],"code3":['A2','L','M','']}) 
Run Code Online (Sandbox Code Playgroud)

可视化:

a: code1 code2
0     A     E
1     B     F
2     C     G
3     D     H
b: code1 code2 code3
0    A1     E     A2 
1     B     F     L
2     C     G     M
3     D     N      
Run Code Online (Sandbox Code Playgroud)

我理想的输出是有一个数据帧'c'说:

c: addedword  deletedword
0   A1,A2      A
1   L
2   M
3   N          H
Run Code Online (Sandbox Code Playgroud)

基本上,我想将'a'中的每一行与'b'中的相应行进行比较.然后比较每个元素,以便在添加字符串或删除字符串时,显示到新的数据帧.

piR*_*red 5

使用设置差异

g = lambda x: map(set, x.values)          # converts 2-D array to sets
f = lambda t: (t[1] - t[0], t[0] - t[1])  # t will be a tuple of sets
h = lambda y: map(','.join, y)            # stitch sets back together
pd.DataFrame(
    list(map(h, map(f, zip(*map(g, (a, b)))))),
    columns=['Added', 'Deleted']
)

   Added Deleted
0  A1,A2       A
1      L        
2      M        
3     ,N       H
Run Code Online (Sandbox Code Playgroud)

  • 很高兴见到你回来 :-) (4认同)