我想判断一个组中是否有不同版本的文档.如果是这样,则应将它们写入新的数据帧中.

我的初始数据框如下所示:

document version group
abc 1 1
abc 1 1
abc 2 1
testtest 4 1
xyz 3 2
xyz 77 2
abc 3 3
qwertz 10 4
qwertz 9 4
x 1 5
x 1 5
import pandas as pd

d = {'document': ['abc', 'abc', 'abc', 'testtest', 'xyz', 'xyz', 'abc', 'qwertz', 'qwertz', 'x', 'x'], 
    'version': [1,1,2,4,3,77,3,10,9,1,1], 
    'group': [1,1,1,1,2,2,3,4,4,5,5]}
df = pd.DataFrame(data=d)

数据框有相对较多的条目.如何使绩效在技术上合理有效?

输出应如下所示:

group document version
1 abc 1
1 abc 2
2 xyz 3
2 xyz 77
4 qwertz 10
4 qwertz 9

这意味着组"2"包含两次不同版本的文档"abc".即在版本"1"和"2"中.不应列出在一组中多次出现但版本相同的文档(文档"x").

推荐答案

可以使用掩码进行布尔索引:

# is the full row not duplicated?
m1 = ~df.duplicated()
# is there more that one version per document+group?
m2 = df.groupby(['document', 'group'])['version'].transform('nunique').gt(1)

out = df[m1&m2] # keep if both conditions are met

输出:

  document  version  group
0      abc        1      1
2      abc        2      1
4      xyz        3      2
5      xyz       77      2
7   qwertz       10      4
8   qwertz        9      4

Python相关问答推荐

重置PD帧中的值

python sklearn ValueError:使用序列设置数组元素

Pandas—MultiIndex Resample—我不想丢失其他索引的信息´

BeautifulSoup:超过24个字符(从a到z)的迭代失败:降低了首次深入了解数据集的复杂性:

需要帮助使用Python中的Google的People API更新联系人的多个字段'

如何提高Pandas DataFrame中随机列 Select 和分配的效率?

对于标准的原始类型注释,从键入`和`从www.example.com `?

文本溢出了Kivy的视区

具有不同坐标的tkinter canvs.cocords()和canvs.moveto()

正则表达式反向查找

是否从Python调用SHGetKnownFolderPath?

达到最大的Python Webhost资源

在Django管理后台保存模型时保存当前用户

使用极轴 Select 一系列柱

如何将数据从一个数据框按行添加到另一个数据框,仅当两个数据框中第一列的值相等时?

如何在Ubuntu上更新ChromeDriver二进制文件

将公钥字节加载为DH密钥

巨 Python 品脱摄氏度单位

多索引数据帧:对每个组的值进行排序

Pandas 多列数据帧的重采样和内插