假设我们有三个不同年份的数据集:
| 识别号|正文|年份|
| - ------|- ------|- ------|
| 一百零一|美国广播公司|小行星1990|
| 一百零二|阿卜德|小行星1990|
| 一百零三|项目a|小行星1990|
第二个数据集可能包含(或不包含)第一年的ID:
| 识别号|正文|年份|
| - ------|- ------|- ------|
| 一百零四|公元前|小行星1991|
| 一百零一|美国广播公司|小行星1991|
| 一百零二|阿贝|小行星1991|
第三个数据集:
| 识别号|正文|年份|
| - ------|- ------|- ------|
| 一百零四|公元前|小行星1992|
| 一百零五|项目a|小行星1992|
我想以某种方式合并这三个 Dataframe +添加一个新列,以查看连续年份的通用ID(和非通用ID)之间的文本是否相同+如果我们注意到Year 1和Year 2的文本之间存在相似性,则更新年份。
下面是我想要的结果:
| 识别号|正文|年份|相似|
| - ------|- ------|- ------|- ------|
| 一百零一|美国广播公司|小行星1991|真|
| 一百零二|阿贝|小行星1991|假的|
| 一百零三|项目a|小行星1990|假的|
| 一百零四|公元前|小行星1992|真|
| 一百零五|项目a|小行星1992|假的|
所以我还想包含那些与新年相对应的新ID,但也要保留上一年的ID,但在ID +该类似列方面没有匹配。合并不应是内部的(因为我们还希望集成第二个/第三个 Dataframe 中不存在的那些ID),并且如果Similar列为真,则应更新年份(假设来自ID 104,1991年的文本与来自ID 104,1992年的文本相同)。
谢谢
2条答案
按热度按时间f87krz0w1#
对于列
Similar
,可以将groupby.agg
与lambda g: g.nunique()!=len(g)
(如果至少有一个非重复项)或lambda g: g.duplicated(keep=False).all()
一起使用:输出:
zu0ti5jz2#
所以,我在这里第一次合并所有df使用Pandasconcat函数,在第二阶段分组id和第三次应用lambda函数和过滤最后一个位置的
-1
。请尝试以下代码: