python-3.x 对于ID列中的每个重复值,我如何用该值附加字符串“重复”

2nbm6dog  于 2022-11-26  发布在  Python
关注(0)|答案(2)|浏览(150)

我已经创建了一个 Dataframe

df=pd.DataFrame({'Weather':[32,45,12,18,19,27,39,11,22,42],
            'Id':[1,2,3,4,5,1,6,7,8,2]})
df.head()

你可以看到索引5和9上的ID是重复的。所以,我想附加一个字符串--与索引5和9上的ID重复。

df.loc[df['Id'].duplicated()]

输出

Weather  Id
5   27      1
9   42      2

预期输出

Weather Id
5   27      1--duplicated
9   42      2--duplicated
tkqqtvp1

tkqqtvp11#

是否要使用assign修改先前输出的聚合DataFrame?

(df.loc[df['Id'].duplicated()]
   .assign(Id=lambda d: d['Id'].astype(str).add('--duplicated'))
)

输出:

Weather             Id
5       27  1--duplicated
9       42  2--duplicated

或者,用布尔索引代替对原始DataFrame的修改?

m = df['Id'].duplicated()
df.loc[m, 'Id'] = df.loc[m, 'Id'].astype(str)+'--duplicated'

输出量:

Weather             Id
0       32              1
1       45              2
2       12              3
3       18              4
4       19              5
5       27  1--duplicated
6       39              6
7       11              7
8       22              8
9       42  2--duplicated
o7jaxewo

o7jaxewo2#

如果需要向筛选行添加后缀,请使用DataFrame.loc by mask:

m = df['Id'].duplicated()
df.loc[m,'Id' ] = df.loc[m,'Id' ].astype(str).add('--duplicated')
print (df)
   Weather             Id
0       32              1
1       45              2
2       12              3
3       18              4
4       19              5
5       27  1--duplicated
6       39              6
7       11              7
8       22              8
9       42  2--duplicated

或者使用boolean indexing然后加上后缀:

df1 = df[df['Id'].duplicated()].copy()
df1['Id'] = df1['Id'].astype(str) + '--duplicated'
print (df1)
   Weather             Id
5       27  1--duplicated
9       42  2--duplicated

相关问题