熊猫识别列1中的所有行,其中列2,3中出现重复

问题描述:

我想从Python中的熊猫数据框中删除重复的条目。 DataFrame由多个* .csv文件的垂直concatenated内容组成。下面是数据框:熊猫识别列1中的所有行,其中列2,3中出现重复

print df 

    file TestA TestB 
    One.csv  7513 -643.1 
    One.csv 15347  NaN 
    One.csv  NaN  22.7 
    One.csv 46321  NaN 
    One.csv  NaN 156.1 
    One.csv  2477  52.7 
    Two.csv  417 1473.5 
    Two.csv  7513 -643.1 
    Two.csv 15347  NaN 
    Two.csv  NaN  22.7 
    Two.csv 46321  NaN 
    Two.csv  NaN 156.1 
Three.csv -4341  NaN 
Three.csv 34473  437 
Three.csv  1349  NaN 
Four.csv  17  NaN 
Four.csv  107  NaN 
Four.csv  -931 44536 
Four.csv  6285  NaN 
Four.csv  119 34722 

我想做到以下几点:一 。

print("Rows %s of %s are duplicated in rows %s of %s. Rows from %s will now be removed from the DataFrame.") % ([1,2,3,4,5],'One.csv',[2,3,4,5,6],'Two.csv', 'One.csv') 

我想print声明这样的结果:喜欢的东西

Rows [1,2,3,4,5] of One.csv are duplicated in rows [2,3,4,5,6] of Two.csv. Rows from One.csv will now be removed from the DataFrame.

我不知道如何识别行和设置他们在print声明。

有没有方法根据第1列的行号识别重复的行(FileName)?

编辑: 要创建DataFrame df,请从这里选择并复制DataFrame到剪贴板。然后用这个:

import pandas as pd 
df = pd.read_clipboard() 
print df 

不知道究竟你想打印,但您可以用groupby识别重复的行:

In [169]: g = df.groupby(['TestA', 'TestB']) 
In [170]: g.groups 
Out[170]: 
{(-4341.0, nan): [12L], 
(-931.0, 44536.0): [17L], 
(17.0, nan): [15L], 
(107.0, nan): [16L], 
(119.0, 34722.0): [19L], 
(417.0, 1473.5): [6L], 
(1349.0, nan): [14L], 
(2477.0, 52.7): [5L], 
(6285.0, nan): [18L], 
(7513.0, -643.1): [0L, 7L], 
(15347.0, nan): [8L], 
(34473.0, 437.0): [13L], 
(46321.0, nan): [3L], 
(nan, 22.7): [9L], 
(nan, 156.1): [4L], 
(nan, 156.1): [11L], 
(15347.0, nan): [1L], 
(nan, 22.7): [2L], 
(46321.0, nan): [10L]} 

然后你可以选择你想删除

哪些
+0

嗨,我已经添加到原来的职位,我想'印刷'输出。我想从'FileName'列的2' * .csv'文件名中找到重复行号的列表。在'One.csv'中,我想要一个表示'[1,2,3,4,5]'的列表,并且在'Two.csv'中我想要一个表示[2,3,4,5,6 ]。 – 2015-04-03 15:58:12

我得寄我都试过,希望它得到的东西会在这里:

1.本给我重复:

duplicates = df[df.columns[1:]].duplicated() 

2.本给我的文件有重复的条目列表:

files = df[duplicates==True]['file'].unique().tolist() 

3,本打印的消息是接近我想要的,但不是我想要的东西:

print('Rows of ' + ", ".join(["%s"]*len(files)) + 'are duplicated. These rows will now be removed from the dataframe.' % tuple(files)) 

print语句丢失:

  1. 每个行号˚F ILE - 它缺少[1,2,3,4,5]为One.csv
  2. 行号[2,3,4,5,6]为Two.csv

如果有人能找到要包含在打印语句这些行号(如我已经描述的方式原来的帖子),那么这将回答这个问题。

+0

我在下面的帖子中进一步添加了一条评论,解释所需的列表。我还将此添加到原始帖子中。如果有任何额外的信息需要,请随时让我知道。我想获得一些帮助打印行号(如上所述)。 – 2015-04-04 20:00:29