删除pandas数据帧中的重复项后,替换特定的列值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除pandas数据帧中的重复项后,替换特定的列值相关的知识,希望对你有一定的参考价值。

我是熊猫的初学者(如果我使用错误的术语,我道歉),我目前正致力于基因组学项目。使用drop_duplicates()后,我无法操作dataframes列。我想更改删除重复项后保留的id的列'mutation'中的列值,以指示此id有多个突变。

My code:

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)

Result:

     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(),我正在接近我想要的。但是,如何将“变异”列中的值更改为“多个”?

 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

What i want:

     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
另一答案
df.loc[df.duplicated(subset=['id', 'sample'], keep='last'), 'mutation'] = 'multi'
df.drop_duplicates(subset=['id', 'sample'])

说明:首先确定哪些是重复项并更改那些重复项的变异列。之后,删除重复项。

以上是关于删除pandas数据帧中的重复项后,替换特定的列值的主要内容,如果未能解决你的问题,请参考以下文章

根据列值删除Python Pandas中的DataFrame行[重复]

如何根据数据框中的列值获取特定的行数[重复]

Pandas - 获取行匹配条件的列值[重复]

如何根据一个数据帧中的列值和R中另一个数据帧的列标题名称有条件地创建新列

当列表值与Pyspark数据帧中的列值的子字符串匹配时,填充新列

Oracle SQL REGEXP 用不同的列值替换特定字符串