如何分析此Pandas DataFrame中的所有重复项?

我希望能够计算Pandas DataFrame中数据的描述性统计信息,但我只关心重复的条目。例如,假设我通过以下方式创建了DataFrame:

import pandas as pd

data={'key1':[1,2,3,1,2,3,2,2],'key2':[2,2,1,2,2,4,2,2],'data':[5,6,2,6,1,6,2,8]}

frame=pd.DataFrame(data,columns=['key1','key2','data'])

print frame

key1 key2 data

0 1 2 5

1 2 2 6

2 3 1 2

3 1 2 6

4 2 2 1

5 3 4 6

6 2 2 2

7 2 2 8

如您所见,行0、1、3、4、6和7都是重复的(使用’key1’和’key2’。但是,如果我像这样索引此DataFrame:

frame[frame.duplicated(['key1','key2'])]

我懂了

   key1  key2  data

3 1 2 6

4 2 2 1

6 2 2 2

7 2 2 8

(即第一行和第二行不会显示,因为重复的方法未将它们索引为True)。

那是我的第一个问题。我的第二个问题涉及如何从此信息中提取描述性统计信息。暂时忘记丢失的重复项,假设我要为重复项计算.min()和.max()(这样我就可以得到一个范围)。我可以在groupby对象上使用groupby和这些方法,如下所示:

a.groupby(['key1','key2']).min()

这使

           key1  key2  data

key1 key2

1 2 1 2 6

2 2 2 2 1

我想要的数据显然在这里,但是提取数据的最佳方法是什么?如何索引结果对象以获取所需的内容(key1,key2,数据信息)?

回答:

由于自 Pandas 0.17 开始不赞成使用take_lastduplicated()方法的参数,而是使用新参数,因此请参考以下答案以获取正确的方法:keep

  • 使用调用该duplicated()方法keep=False,即frame.duplicated(['key1', 'key2'], keep=False)

因此,为了提取此特定问题所需的数据,需要满足以下条件:

In [81]: frame[frame.duplicated(['key1', 'key2'], keep=False)].groupby(('key1', 'key2')).min()

Out[81]:

data

key1 key2

1 2 5

2 2 1

[2 rows x 1 columns]

有趣的是,如本期中所述, Pandas 0.17中的

此更改可能部分归因于该问题。


我们可以使用方法的take_last参数duplicated()

take_lastboolean,默认False

对于一组不同的重复行,将除最后一行以外的所有行标记为重复。除第一行外,所有其他都将被标记为默认值。

如果将take_last的值设置为True,则标记除最后重复的行以外的所有行。结合使用它的默认值False,它标记除第一重复行之外的所有行,使我们可以标记所有重复的行:

In [76]: frame.duplicated(['key1', 'key2'])

Out[76]:

0 False

1 False

2 False

3 True

4 True

5 False

6 True

7 True

dtype: bool

In [77]: frame.duplicated(['key1', 'key2'], take_last=True)

Out[77]:

0 True

1 True

2 False

3 False

4 True

5 False

6 True

7 False

dtype: bool

In [78]: frame.duplicated(['key1', 'key2'], take_last=True) | frame.duplicated(['key1', 'key2'])

Out[78]:

0 True

1 True

2 False

3 True

4 True

5 False

6 True

7 True

dtype: bool

In [79]: frame[frame.duplicated(['key1', 'key2'], take_last=True) | frame.duplicated(['key1', 'key2'])]

Out[79]:

key1 key2 data

0 1 2 5

1 2 2 6

3 1 2 6

4 2 2 1

6 2 2 2

7 2 2 8

[6 rows x 3 columns]

现在我们只需要使用groupbymin方法,我相信输出是必需的格式:

In [81]: frame[frame.duplicated(['key1', 'key2'], take_last=True) | frame.duplicated(['key1', 'key2'])].groupby(('key1', 'key2')).min()

Out[81]:

data

key1 key2

1 2 5

2 2 1

[2 rows x 1 columns]

以上是 如何分析此Pandas DataFrame中的所有重复项? 的全部内容, 来源链接: utcz.com/qa/413372.html

回到顶部