说我有一个熊猫数据框,例如
data = [['M', 10, 'red','apple'],
['F', 15, 'blue','orange'],
['M', 14, 'blue','apple'],
['M', 14, 'blue','apple'],
['F', 14, 'blue','apple'],
['M', 14, 'red',''],
['M', 14, 'blue','banana'],
['', 14, 'blue','apple']]
df = pd.DataFrame(data, columns = ['Gender', 'Age', 'Color','Fruit'])
这里的性别有3个级别,M,F,丢失,颜色有2个级别,红色,蓝色,水果有4个级别,苹果,橙,香蕉,缺失,数字都没有关系
所以整个数据框中总共有9个级别,
我希望为每个级别分配一行, 例如
我得到的数据帧将像
result_data = [['M', 10, 'red','apple'],
['F', 15, 'blue','orange'],
['M', 14, 'red',''],
['M', 14, 'blue','banana'],
['', 14, 'blue','apple']]
所以我为每种类别(M,F,missing_Gender,红色,蓝色,苹果,橙色,香蕉,missing_Fruit)获得了一行
我的删除条件为 在result_data中,已删除的3行中的所有类别均可用
答案 0 :(得分:1)
您可以DataFrame.drop_duplicates()
,请参考this documentation。
使用subset
和keep
的选项,您可以实现所需的目标,即
df.drop_duplicates(subset=['Gender','Color','Fruit'], keep=False)
基本上,参数subset
包含您在数据中唯一性的定义,对于上面的示例,您通过这3列定义唯一性数据。
参数keep
表示保留重复的数据。这样一来,您可以保留first
或last
元素,并将其设置为False
意味着完全删除所有重复项。
例如,定义重复项=具有唯一的gender
和fruit
的数据:
data=[['M', 14, 'blue','apple'],
['M', 20, 'red','apple'],
['F', 14, 'blue','apple'],
['F', 14, 'red','apple'],
['F', 20, 'blue','apple']]
df = pd.DataFrame(data, columns = ['Gender', 'Age', 'Color','Fruit'])
# The code below will result in
# 'M', 14, 'blue','apple'
# 'F', 14, 'blue','apple'
df.drop_duplicates(subset=['Gender','Fruit'], keep='first')
# The code below will result in
# 'M', 20, 'red','apple'
# 'F', 20, 'blue','apple'
df.drop_duplicates(subset=['Gender','Fruit'], keep='last')
# The code below will result in empty, since no duplicates
# are kept
df.drop_duplicates(subset=['Gender','Fruit'], keep=False)
希望这会有所帮助。