如何解决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 举报,一经查实,本站将立刻删除。