pandas 如果某行是重复的,则标记为附加,如果它是第一行、第二行等重复的行

f1tvaqid  于 2023-01-19  发布在  其他
关注(0)|答案(1)|浏览(92)

我想标志,如果一行是重复的,并附上如果它的第一,第二,第三等重复列在Pandas数据框。
更形象地说,我想从:
| 身份证|国家|城市|
| - ------|- ------|- ------|
| 1个|法国|巴黎|
| 第二章|法国|巴黎|
| 三个|法国|里昂|
| 四个|法国|里昂|
| 五个|法国|里昂|

| 身份证|国家|城市|重复标记|
| - ------|- ------|- ------|- ------|
| 1个|法国|巴黎|1个|
| 第二章|法国|巴黎|1个|
| 三个|法国|里昂|第二章|
| 四个|法国|里昂|第二章|
| 五个|法国|里昂|第二章|
注意,在查看行是否重复时不考虑id。

c2e8gylq

c2e8gylq1#

两个选项:
首先,如果您有许多列需要比较,可以使用:

comparison_df = df.drop("id", axis=1)
df["duplicated_flag"] = (comparison_df != comparison_df.shift()).any(axis=1).cumsum()

我们删除比较中不需要的列,然后使用.shift().any()检查每一行是否与其上一行等价,最后使用.cumsum()读取duplicated_flag的值。
但是,如果您只有两列需要比较(或者由于某种原因,您有很多列需要删除),您可以一次找到一个不匹配的行,然后使用.cumsum()获取每行的duplicated_flag值。这有点冗长,所以我对这个选项不是很满意,但为了完整性,我将其留在这里,以防它更适合您的用例:

country_comparison = df["Country"].ne(df["Country"].shift())
city_comparison = df["City"].ne(df["City"].shift())
df["duplicated_flag"] = (country_comparison | city_comparison).cumsum()
print(df)

这些输出:

id    Country      City  duplicated_flag
0  1     France     Paris                   1
1  2     France     Paris                   1
2  3     France      Lyon                   2
3  4     France      Lyon                   2
4  5     France      Lyon                   2

相关问题