删除Pandas DataFrame(Python)中的一行中的重复值

时间:2013-05-24 10:03:26

标签: python duplicates pandas

在pandas数据框中的任何行中删除重复值的表达式是什么,如下所示....(注意:第一列是索引(日期),后面是四列数据)。

1983-02-16 512 517 510 514,
1983-02-17 513 520 513 517,
1983-02-18 500 500 500 500< - 重复值,
1983-02-21 505 505 496 496

删除重复值的行,最后以此结束......

1983-02-16 512 517 510 514,
1983-02-17 513 520 513 517,
1983-02-21 505 505 496 496

只能通过列而不是行来找到如何做到这一点....非常感谢提前,

彼得

2 个答案:

答案 0 :(得分:1)

稍微优雅/动态(但可能性能较差的版本):

In [11]: msk = df1.apply(lambda col: df[1] != col).any(axis=1)
Out[11]:
0     True
1     True
2    False
3     True
dtype: bool

In [12]: msk.index = df1.index  # iloc doesn't support masking

In [13]: df1.loc[msk]
Out[13]:
              1    2    3    4
1983-02-16  512  517  510  514
1983-02-17  513  520  513  517
1983-02-21  505  505  496  496

答案 1 :(得分:0)

import pandas as pd
import io
content = '''\
1983-02-16 512 517 510 514
1983-02-17 513 520 513 517
1983-02-18 500 500 500 500
1983-02-21 505 505 496 496'''
df = pd.read_table(io.BytesIO(content), parse_dates=[0], header=None, sep='\s+',
                   index_col=0)
index = (df[1] == df[2]) & (df[1] == df[3]) & (df[1] == df[4])
df = df.ix[~index]
print(df)

产量

              1    2    3    4
0                             
1983-02-16  512  517  510  514
1983-02-17  513  520  513  517
1983-02-21  505  505  496  496

df.ix可用于选择行。 df = df.ix[~index]选择index为假的所有行。