社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Jay • 5 年前 • 1847 次点击  

这个 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
 
1847 次点击  
文章 [ 5 ]  |  最新文章 5 年前
CT Zhu
Reply   •   1 楼
CT Zhu    10 年前

实际上,删除行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    10 年前

使用 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    6 年前

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

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    7 年前

只是想补充本的回答 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    9 年前

这在熊猫身上要容易得多 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)