pandas 在三列中找到重复项,并将另一列中的结果加1

brc7rcf0  于 2023-04-18  发布在  其他
关注(0)|答案(4)|浏览(113)

我想识别三列中的重复值,并在另一列的结果中求和+1。

# This is my data frame,
# I want to identify duplication in column1, column2 and column3
d = {
'Column1': ['1', '1', '2','3'],
'column2': [101, 101, 234, 203],
'column3': ['c', 'c', 'd','c'],
'columnx': ['0.1', '0.2', '0.1','0.2']}

     Column1  column2 column3 columnx
0       1      101       c      0.1
1       1      101       c      0.2
2       2      234       d      0.1
3       3      203       c      0.2

预期结果

Column1  column2 column3 columnx
0       1      101       c      1.1
1       1      101       c      1.2
2       2      234       d      0.1
3       3      203       c      0.2
q9rjltbz

q9rjltbz1#

您可以首先使用DataFrame.duplicated(keep=False)查找所有重复的行,然后有条件地分配求和结果

m = df.duplicated(['Column1', 'column2', 'column3'], keep=False)
df.loc[m, 'columnx'] = df['columnx'].add(1)
print(df)

   Column1  column2 column3  columnx
0        1      101       c      1.1
1        1      101       c      1.2
2        2      234       d      0.1
3        3      203       c      0.2
dsf9zpds

dsf9zpds2#

首先将columnx转换为numeric:

df['columnx'] = pd.to_numeric(df['columnx'], errors='coerce')

接下来,调用duplicated(返回bools)并将其添加回:

df['columnx'] += df[['Column1', 'column2', 'column3']].duplicated(keep=False)
df
  Column1  column2 column3  columnx
0       1      101       c      1.1
1       1      101       c      1.2
2       2      234       d      0.1
3       3      203       c      0.2

这将就地更新DataFrame。

df2 = df.assign(columnx=df[['Column1', 'column2', 'column3']]
                      .duplicated(keep=False).add(df['columnx']))
yfjy0ee7

yfjy0ee73#

试试这个:

mask = df.duplicated(subset=['Column1', 'column2', 'column3'], keep=False)
df.loc[mask, 'columnx'] = df.loc[mask, 'columnx'].astype(float) + 1
6rqinv9w

6rqinv9w4#

d = {
    'Column1': ['1', '1', '2', '3'],
    'column2': [101, 101, 234, 203],
    'column3': ['c', 'c', 'd', 'c'],
    'columnx': ['0.1', '0.2', '0.1', '0.2']
}
df = pd.DataFrame(d)
duplicates = df.duplicated(subset=['Column1', 'column2', 'column3'], keep=False)
df.loc[duplicates, 'columnx'] = (df.loc[duplicates, 'columnx'].astype(float) + 1).astype(str)

输出:

Column1  column2 column3 columnx
0       1      101       c     1.1
1       1      101       c     1.2
2       2      234       d     0.1
3       3      203       c     0.2

相关问题