编辑 熊猫0.17 或更高版本:
由于自 Pandas 0.17 开始不赞成使用
take_last该
duplicated()方法的参数,而是使用新参数,因此请参考以下答案以获取正确的方法:
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]: datakey1 key2 1 2 52 2 1[2 rows x 1 columns]有趣的是,如本期中所述, Pandas 0.17中的
此更改可能部分归因于该问题。
对于 Pandas 0.17 之前的版本:
我们可以使用方法的
take_last参数
duplicated():
take_last:boolean,默认False对于一组不同的重复行,将除最后一行以外的所有行标记为重复。除第一行外,所有其他都将被标记为默认值。
如果将
take_last的值设置为
True,则标记除最后重复的行以外的所有行。结合使用它的默认值
False,它标记除第一重复行之外的所有行,使我们可以标记所有重复的行:
In [76]: frame.duplicated(['key1', 'key2'])Out[76]: 0 False1 False2 False3 True4 True5 False6 True7 Truedtype: boolIn [77]: frame.duplicated(['key1', 'key2'], take_last=True)Out[77]: 0 True1 True2 False3 False4 True5 False6 True7 Falsedtype: boolIn [78]: frame.duplicated(['key1', 'key2'], take_last=True) | frame.duplicated(['key1', 'key2'])Out[78]: 0 True1 True2 False3 True4 True5 False6 True7 Truedtype: boolIn [79]: frame[frame.duplicated(['key1', 'key2'], take_last=True) | frame.duplicated(['key1', 'key2'])]Out[79]: key1 key2 data0 1 2 51 2 2 63 1 2 64 2 2 16 2 2 27 2 2 8[6 rows x 3 columns]
现在我们只需要使用
groupby和
min方法,我相信输出是必需的格式:
In [81]: frame[frame.duplicated(['key1', 'key2'], take_last=True) | frame.duplicated(['key1', 'key2'])].groupby(('key1', 'key2')).min()Out[81]: datakey1 key2 1 2 52 2 1[2 rows x 1 columns]


