在pandas数据框架中删除重复的数据后替换特定的列值[英] Replacing specific column values after removing duplicates in a pandas dataframe

本文是小编为大家收集整理的关于在pandas数据框架中删除重复的数据后替换特定的列值的处理方法,想解了在pandas数据框架中删除重复的数据后替换特定的列值的问题怎么解决?在pandas数据框架中删除重复的数据后替换特定的列值问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我是 pandas 的初学者(如果我使用了错误的术语,我深表歉意),我目前正在从事基因组学项目.使用 drop_duplicates() 后,我在操作数据框列时遇到问题.我想更改删除重复项后保留的 id 的"突变"列中的列值,以指示该 id 具有多个突变.

我的代码:

df = pd.DataFrame([
('MYC', 'nonsense', 's1'),
('MYC', 'missense', 's1'),
('MYCL', 'nonsense', 's1'),
('MYCL', 'missense', 's2'),
('MYCN', 'missense', 's3'),
('MYCN', 'UTR', 's1'),
('MYCN', 'nonsense', 's1')
], columns=['id', 'mutation', 'sample'])

print(df)

结果:

     id  mutation sample
0   MYC  nonsense     s1
1   MYC  nonsense     s1
2   MYC  missense     s1
3  MYCL  nonsense     s1
4  MYCL  missense     s2
5  MYCN  missense     s3
6  MYCN       UTR     s1
7  MYCN  nonsense     s1

我尝试使用 drop_duplicates() 并且我正在接近我想要的.但是如何将"mutation"列中的值更改为"multi"?

 print(df.drop_duplicates(subset=('sample','id')))
     id  mutation sample
0   MYC  nonsense     s1
3  MYCL  nonsense     s1
4  MYCL  missense     s2
5  MYCN  missense     s3
6  MYCN       UTR     s1

我想要什么:

     id  mutation sample
0   MYC  multi        s1
3  MYCL  nonsense     s1
4  MYCL  missense     s2
5  MYCN  missense     s3
6  MYCN  multi        s1

推荐答案

duplicated

mask = df.duplicated(['id', 'sample'], keep=False)
df.assign(mutation=df.mutation.mask(mask, 'multi')).drop_duplicates()

     id  mutation sample
0   MYC     multi     s1
2  MYCL   nonsens     s1
3  MYCL  missense     s2
4  MYCN  missense     s3
5  MYCN     multi     s1
<小时>

groupby

df.groupby(['id', 'sample'], sort=False).mutation.pipe(
    lambda g: g.first().mask(g.size() > 1, 'multi')
).reset_index().reindex(df.columns, axis=1)

     id  mutation sample
0   MYC     multi     s1
1  MYCL   nonsens     s1
2  MYCL  missense     s2
3  MYCN  missense     s3
4  MYCN     multi     s1

本文地址:https://www.itbaoku.cn/post/1727765.html