Py学习  »  Python

如何在python pandas中的列中删除重复的名称[重复]

Jay • 4 年前 • 884 次点击  

这个 pandas drop_duplicates 函数对于“统一”数据帧非常有用。但是,要传递的关键字参数之一是 take_last=True take_last=False ,而我想删除列子集中重复的所有行。这可能吗?

    A   B   C
0   foo 0   A
1   foo 1   A
2   foo 1   B
3   bar 1   A

例如,我想删除与列匹配的行 A C 所以这应该删除第0行和第1行。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47028
 
884 次点击  
文章 [ 5 ]  |  最新文章 4 年前
CT Zhu
Reply   •   1 楼
CT Zhu    9 年前

实际上,删除行0和1只需要(保留包含匹配a和c的任何观察结果):

In [335]:

df['AC']=df.A+df.C
In [336]:

print df.drop_duplicates('C', take_last=True) #this dataset is a special case, in general, one may need to first drop_duplicates by 'c' and then by 'a'.
     A  B  C    AC
2  foo  1  B  fooB
3  bar  1  A  barA

[2 rows x 4 columns]

但我怀疑你真正想要的是这个(保留一个包含匹配a和c的观察结果):

In [337]:

print df.drop_duplicates('AC')
     A  B  C    AC
0  foo  0  A  fooA
2  foo  1  B  fooB
3  bar  1  A  barA

[3 rows x 4 columns]

编辑:

现在情况更清楚了,因此:

In [352]:
DG=df.groupby(['A', 'C'])   
print pd.concat([DG.get_group(item) for item, value in DG.groups.items() if len(value)==1])
     A  B  C
2  foo  1  B
3  bar  1  A

[2 rows x 3 columns]
HYRY
Reply   •   2 楼
HYRY    9 年前

使用 groupby filter

import pandas as pd
df = pd.DataFrame({"A":["foo", "foo", "foo", "bar"], "B":[0,1,1,1], "C":["A","A","B","A"]})
df.groupby(["A", "C"]).filter(lambda df:df.shape[0] == 1)
Ramanujam Allam
Reply   •   3 楼
Ramanujam Allam    4 年前

如果要将结果存储在另一个数据集中:

df.drop_duplicates(keep=False)

df.drop_duplicates(keep=False, inplace=False)

如果需要更新同一数据集:

df.drop_duplicates(keep=False, inplace=True)

以上示例将删除所有重复项并保留一个,类似于 DISTINCT * 在SQL中

Jake
Reply   •   4 楼
Jake    6 年前

只是想补充本的回答 drop_duplicates 以下内容:

keep :{first,last,false},默认为first

  • 第一次:除去第一次出现的重复项。

  • 最后:除去最后一次出现的重复项。

  • 错误:删除所有重复项。

如此确定 保持 我们给你想要的答案。

dataframe.drop_duplicates(*args,**kwargs)返回带有 删除重复的行,也可以只考虑某些列

参数:子集:列标签或标签序列,可选 默认情况下,只考虑用于标识重复项的某些列 使用所有列keep:{–first–first,–last–last,false},default –first–first:除去第一次出现的重复项。最后的 :除去上次出现的重复项。错误:全部删除 复制品。take_last:不推荐使用的inplace:boolean,默认为false 是否将副本放置在适当位置或返回副本cols:kwargs 只有subset[deprecated]的参数返回:depreduplicated: 数据帧

Ben
Reply   •   5 楼
Ben    8 年前

这在熊猫身上要容易得多 drop_duplicates 以及keep参数。

import pandas as pd
df = pd.DataFrame({"A":["foo", "foo", "foo", "bar"], "B":[0,1,1,1], "C":["A","A","B","A"]})
df.drop_duplicates(subset=['A', 'C'], keep=False)