我正在比较两个Excel工作表的内容,这些工作表已变成一个熊猫数据框,并且各列彼此相邻。
我创建了一些代码,将两列进行比较,并在下面提供输出,但是一些字符串包含大量文本,因此我只想显示区别。
+---------------------+-------------------------+---------------------------------------------+
| Old | New | Changes |
+---------------------+-------------------------+---------------------------------------------+
| Apple, Egg, Ham | Apple, Egg, Norway, Ham | Apple, Egg, Ham --> Apple, Egg, Norway, Ham |
| Instagram, Facebook | Instagram, Twitter | Instagram, Facebook --> Instagram, Twitter |
+---------------------+-------------------------+---------------------------------------------+
最佳结果如下所示:
+---------------------+-------------------------+---------------------+
| Old | New | Changes |
+---------------------+-------------------------+---------------------+
| Apple, Egg, Ham | Apple, Egg, Norway, Ham | +Norway |
| Instagram, Facebook | Instagram, Twitter | +Twitter, -Facebook |
+---------------------+-------------------------+---------------------+
在第1行中添加了挪威,在第2行中添加了Twitter,并从第2行中删除了Facebook。
我该如何解决?
答案 0 :(得分:1)
将值转换为集合,然后使用它们的差,还在+
中添加-
和f-string
,并在最后一步中由,
加入:
def f(x):
old, new = set(x['Old'].split(', ')), set(x['New'].split(', '))
d = old.difference(new)
e = new.difference(old)
return ', '.join([f'+{y}' for y in e] + [f'-{y}' for y in d])
df['Changes'] = df.apply(f, axis=1)
print (df)
Old New Changes
0 Apple, Egg, Ham Apple, Egg, Norway, Ham +Norway
1 Instagram, Facebook Instagram, Twitter +Twitter, -Facebook
答案 1 :(得分:1)
这就是我要去的地方:
def find_diff(x):
more = set(x.New.split(",")) - set(x.Old.split(","))
less = set(x.Old.split(",")) - set(x.New.split(","))
result = " ".join([f"+{x}" for x in more]) +", " + " ".join([f"-{x}" for x in less])
return result
df.apply(find_diff, axis=1)