Python 向dataframe添加新列以指示特定列中的重复项

Python 向dataframe添加新列以指示特定列中的重复项,python,pandas,dataframe,Python,Pandas,Dataframe,我是pandas的新手,在编写基于自定义条件添加新列的函数时遇到问题: 以下是我的数据帧: c1 c2 c3 c4 c5 0 1234 888 36.12733265 -115.1710473 7048929337 1 2341 70 33.62503113 -111.928576 7048929337 2 8910 419 40.734631 -73

我是pandas的新手,在编写基于自定义条件添加新列的函数时遇到问题: 以下是我的数据帧:

    c1      c2     c3           c4              c5
0   1234    888    36.12733265  -115.1710473    7048929337
1   2341    70     33.62503113  -111.928576     7048929337
2   8910    419    40.734631    -73.8700321     9192939495
3   8910    910    40.734631    -73.8700321     9192939495
4   5678    1295   40.719729    -73.84412       5109400188
5   3345    4976   33.5350596   -112.2670918    9192939495
6   233345  2364   33.5350596   -112.2670918    4806391796
7   3010    1155   42.8254528   -71.5012724     2393900772
8   3010    6800   41.0488534   -75.313324      8434975913
9   4534    1791   42.955875    -76.92238325    9048190206
10  7658    4711   40.7635948   -73.3066489     6312542029
11  7658    9120   34.8465348   -117.0854289    6312542029
我想添加一个名为dup的新列,其中包含指示该行是否重复(就特定列而言是重复的)的标志。 优先顺序如下:

1.)如果行在c3和c4方面重复,则标志应为dup_c3c4

2.)否则,如果行在c5方面重复,则标志应为dup_c5

3.)否则,如果行在c1方面重复,则标志应为dup_c1

4.)else标志应为NaD(非重复)

预期产出:

    c1      c2      c3            c4            c5          DUP
0   1234    888     36.12733265  -115.1710473   7048929337  dup_c5
1   2341    70      33.62503113  -111.928576    7048929337  dup_c5
2   8910    419     40.734631    -73.8700321    9192939495  dup_c4c5
3   8910    910     40.734631    -73.8700321    9192939495  dup_c4c5
4   5678    1295    40.719729    -73.84412      5109400188  NaD
5   3345    4976    33.5350596   -112.2670918   9192939495  dup_c4c5
6   233345  2364    33.5350596   -112.2670918   4806391796  dup_c4c5
7   3010    1155    42.8254528   -71.5012724    2393900772  dup_c1
8   3010    6800    41.0488534   -75.313324     8434975913  dup_c1
9   4534    1791    42.955875    -76.92238325   9048190206  NaD
10  7658    4711    40.7635948   -73.3066489    6312542029  dup_c5
11  7658    9120    34.8465348   -117.0854289   6312542029  dup_c5
任何人都可以建议我如何使用if-else或以任何其他有效的方式为此场景编写自定义函数。

针对3种不同的情况使用:

m1 = df.duplicated(['c3','c4'], keep=False)
m2 = df.duplicated(['c5'], keep=False)
m3 = df.duplicated(['c1'], keep=False)

df['DUP'] = np.select([m1,m2,m3],['dup_c3c4','dup_c5','dup_c1'], default='NaD')
print (df)
        c1    c2         c3          c4          c5       DUP
0     1234   888  36.127333 -115.171047  7048929337    dup_c5
1     2341    70  33.625031 -111.928576  7048929337    dup_c5
2     8910   419  40.734631  -73.870032  9192939495  dup_c3c4
3     8910   910  40.734631  -73.870032  9192939495  dup_c3c4
4     5678  1295  40.719729  -73.844120  5109400188       NaD
5     3345  4976  33.535060 -112.267092  9192939495  dup_c3c4
6   233345  2364  33.535060 -112.267092  4806391796  dup_c3c4
7     3010  1155  42.825453  -71.501272  2393900772    dup_c1
8     3010  6800  41.048853  -75.313324  8434975913    dup_c1
9     4534  1791  42.955875  -76.922383  9048190206       NaD
10    7658  4711  40.763595  -73.306649  6312542029    dup_c5
11    7658  9120  34.846535 -117.085429  6312542029    dup_c5
如果需要功能:

def f(df):
    m1 = df.duplicated(['c3','c4'], keep=False)
    m2 = df.duplicated(['c5'], keep=False)
    m3 = df.duplicated(['c1'], keep=False)

    df['DUP'] = np.select([m1,m2,m3],['dup_c3c4','dup_c5','dup_c1'], default='NaD')
    return df

df1 = f(df)

我尝试使用df['column_name']创建新的数据帧。上面提到的4种情况中的每一种都重复了(keep=False)。。但我想使用一些自定义函数将这些函数合并到一列中。。有什么办法可以做到这一点吗…?谢谢。。我也试过这个。。但是你能建议如何通过一个函数实现同样的功能吗。。我无法为sameGreat编写函数。。。!!谢谢。。!!