Python熊猫-处理重复项
我想以一种全新的方式处理重复项:Python熊猫-处理重复项,python,pandas,Python,Pandas,我想以一种全新的方式处理重复项: df=pd.DataFrame({'A':[1,1,1,2,1],'B':[2,2,1,2,1],'C':[2,2,1,1,1],'D':['a','c','a','c','c']}) df 我只想保留具有唯一值A、B、C的行,并创建二进制列D_A和D_C,因此结果将是这样的,而无需对每行执行超慢循环 result= pd.DataFrame({'A':[1,1,2],'B':[2,1,2],'C':[2,1,1],'D_a':[1,1,0],'D_c':[
df=pd.DataFrame({'A':[1,1,1,2,1],'B':[2,2,1,2,1],'C':[2,2,1,1,1],'D':['a','c','a','c','c']})
df
我只想保留具有唯一值A、B、C的行,并创建二进制列D_A和D_C,因此结果将是这样的,而无需对每行执行超慢循环
result= pd.DataFrame({'A':[1,1,2],'B':[2,1,2],'C':[2,1,1],'D_a':[1,1,0],'D_c':[1,1,1]})
非常感谢您可以使用:
df1 = (df.groupby(['A','B','C'])['D']
.value_counts()
.unstack(fill_value=0)
.add_prefix('D_')
.clip_upper(1)
.reset_index()
.rename_axis(None, axis=1))
print (df1)
A B C D_a D_c
0 1 1 1 1 1
1 1 2 2 1 1
2 2 2 1 0 1
使用
get_dummies
+sum
-
df = df.set_index(['A', 'B', 'C'])\
.D.str.get_dummies()\
.sum(level=[0, 1, 2])\
.add_prefix('D_')\
.reset_index()
df
A B C D_a D_c
0 1 1 1 1 1
1 1 2 2 1 1
2 2 2 1 0 1
你可以这样做
df.loc[df['D']=='a', 'D_a'] = 1
df.loc[df['D']=='c', 'D_c'] = 1
这将在新列中添加1,每个列中都会出现一个“a”或“c”
A B C D D_a D_c
0 1 2 2 a 1.0 NaN
1 1 2 2 c NaN 1.0
2 1 1 1 a 1.0 NaN
3 2 2 1 c NaN 1.0
4 1 1 1 c NaN 1.0
但是你必须用0替换NaN
df = df.fillna(0)
接下来,您只需选择所需的列,然后删除重复项
df = df[["A","B","C", "D_a", "D_c"]].drop_duplicates()
希望这是你一直在寻找的解决方案 您希望如何构造
D_a
和D_c
以从一个五元素列表变成两个三元素列表?那么创建D_a和D_c的规则是什么?我理解删除重复项的理由,但是你希望用D_a和D_c做什么?听起来可能有更好的方法来实现最终目标。如果我们的答案之一有帮助,请投票并接受它。谢谢@路行者啊好!这是常有的事。选民是变化无常的野兽。最好不要让它进入你的皮肤。享受这里的时光,分享你的知识,向他人学习。干杯:-)是的,我同意。顺便说一句,你的回答总是让人印象深刻。我必须说的是一流的python。@RoadRunner谢谢你,我很感激。不过,我还有很长的路要走。但我想我已经到了。关键是要始终保持开放的心态,接受反馈。除了您个人资料中的数字之外,还有更多关于声誉的信息。:-)@toumz干杯,快乐编码!的确令人印象深刻。我要补充一点,这里重要的微妙之处是clip\u upper
。如果没有此选项,则不会删除重复项。使用pd.DataFrame({'A':[1,1,1,2,1,1],'B':[2,2,1,2,1,1],'C':[2,2,1,1,1,1],'D':[A','C','A','C','C']})这一点更清楚。(简单地重复最后一行)。非常好@乔希-非常感谢你,天气真好!