微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pandas:根据某些条件删除重复的行

如何解决Pandas:根据某些条件删除重复的行

希望你一切顺利。 我想根据某些条件删除重复的行。

例如:

    A   B   C   D   E
0   foo 2   3   4   100
1   foo 2   3   1   3
2   foo 2   3   5   nan
3   bar 1   2   8   nan
4   bar 1   2   1   nan

结果应该是

    A   B   C   D   E
0   foo 2   3   4   100
1   foo 2   3   1   3
2   bar 1   2   nan nan

所以我们有重复的行(基于 A、B 和 C 列),首先我们检查 E 列中的值,如果它是 nan 我们删除该行但如果列 E 中的所有值都是 nan(如行的示例3和4关于名称'bar'),我们应该保留一行并将D列中的值设置为nan。

提前致谢。

解决方法

有效

import pandas as pd
import io

table = """
    A   B   C   D   E
0   foo 2   3   4   100
1   foo 2   3   1   3
2   foo 2   3   5   nan
3   bar 1   2   8   nan
4   bar 1   2   1   nan
"""
df = pd.read_table(io.StringIO(table),index_col=0,sep=' ',skipinitialspace=True)

# Index for duplicated in A,B,C and all nan in E
index_1 = set(df[df.duplicated(['A','B','C','E'],keep=False)]["E"].isna().index)

# Index for duplicated ABC and nan in E
index_2 = set(df[df[df.duplicated(['A','C'],keep=False)]["E"].isna()].index)

# Set nan for D in index_1
df.loc[index_1,'D'] = np.nan

# Drop nan E with duplicated ABC except index_1
df.drop(index_2-index_1,inplace=True)

# Drop other duplicates
df.drop_duplicates(['A','D'],inplace=True)

print(df)

这是必需的:

     A  B  C    D      E
0  foo  2  3  4.0  100.0
1  foo  2  3  1.0    3.0
3  bar  1  2  NaN    NaN

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。