我遇到了一个看似简单的问题:在熊猫数据框中删除唯一的行。基本上与的相反drop_duplicates()
。
假设这是我的数据:
A B C
0 foo 0 A
1 foo 1 A
2 foo 1 B
3 bar 1 A
当A和B唯一时,我想删除行,即我只保留行1和2。
我尝试了以下方法:
# Load Dataframe
df = pd.DataFrame({"A":["foo", "foo", "foo", "bar"], "B":[0,1,1,1], "C":["A","A","B","A"]})
uniques = df[['A', 'B']].drop_duplicates()
duplicates = df[~df.index.isin(uniques.index)]
但是我只能得到第2行,因为唯一性是0、1和3!
选择所有重复行的解决方案:
您可以使用duplicated
子集和参数keep=False
来选择所有重复项:
df = df[df.duplicated(subset=['A','B'], keep=False)]
print (df)
A B C
1 foo 1 A
2 foo 1 B
解决方案transform
:
df = df[df.groupby(['A', 'B'])['A'].transform('size') > 1]
print (df)
A B C
1 foo 1 A
2 foo 1 B
对所有唯一行进行了一些修改的解决方案:
#invert boolean mask by ~
df = df[~df.duplicated(subset=['A','B'], keep=False)]
print (df)
A B C
0 foo 0 A
3 bar 1 A
df = df[df.groupby(['A', 'B'])['A'].transform('size') == 1]
print (df)
A B C
0 foo 0 A
3 bar 1 A
我有一个数据帧df: 然后我想删除列表中指示的具有某些序列号的行,假设这里是然后离开: 如何或什么功能可以做到这一点?
问题内容: 我可以使用 功能来删除将部分或全部列设置为的行。是否存在用于删除所有列的值为0的行的等效函数? 在此示例中,我们要删除数据帧的前4行。 谢谢! 问题答案: 事实证明,这可以向量化的方式很好地表达:
问题内容: 我有一个熊猫DataFrame,里面有很多值。 如何删除这样的列? 我试图这样做: 有更优雅的方法吗? 问题答案: 这是保留每列中小于或等于指定数量的nan的列的另一种选择: 在我的测试中,这似乎比李建勋在我测试的案例中建议的放置列方法要快一些:
问题内容: 我想从“ tweets”列中删除停用词。如何遍历每一行和每一项目? 问题答案: 使用列表理解 返回值:
问题内容: 我有一个看起来像这样的熊猫数据框。 我想确定cat和bat是重复的相同值,因此想删除一个记录并仅保留第一条记录。结果数据帧应该只有一个。 问题答案: 使用具有与列的列表上检查重复和保持第一重复的。 如果是: 结果: 然后: 结果:
问题内容: 我有一个类似于以下内容的数据框: 我希望输出为以下格式: 想要从“名称”列中删除所有数字。 我最近来的是使用以下代码在 单元 级别进行的: 任何想法如何在 系列 / 数据框 级别上以更好的方式 实现 。 问题答案: 您可以结合使用正则表达式将str.replace应用于列: 输出: 在正则表达式中代表“任何数字”,代表“一个或多个”。 因此,其含义是:“将字符串中所有出现的数字全部替换