如何用每一列的每个唯一值的整个行来对Pandas Dataframe进行子集设置?

时间:2019-07-05 05:15:15

标签: python pandas dataframe

说我有一个熊猫数据框,例如

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行中的所有类别均可用

1 个答案:

答案 0 :(得分:1)

您可以DataFrame.drop_duplicates(),请参考this documentation

使用subsetkeep的选项,您可以实现所需的目标,即

df.drop_duplicates(subset=['Gender','Color','Fruit'], keep=False)

基本上,参数subset包含您在数据中唯一性的定义,对于上面的示例,您通过这3列定义唯一性数据。

参数keep表示保留重复的数据。这样一来,您可以保留firstlast元素,并将其设置为False意味着完全删除所有重复项。

例如,定义重复项=具有唯一的genderfruit的数据:

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)

希望这会有所帮助。