在亲子条件下过滤熊猫数据框

时间:2019-05-16 06:42:38

标签: python pandas dataframe

我有一个包含3列的数据框df。

    _id  parent_id  type
    A    B          Subcategory_level
    B    null       Main_Level
    D    A          Product_Level
    M    N          Product_Level
    X    Y          Subcategory_Level
    Z    X          Subcategory_Level
    L    Z          Product_Level

我想要的输出是:

    _id  parent_id  type
    D    A          product_level
    M    N          product_level
    L    X          product_level

我尝试的是,删除所有类型等于main_level的行。然后

    df1=df
    df1.rename(columns= {'_id':'parent_id','parent_id':'_id'}, 
 index=str,inplace=True)

然后将df1与df自然连接:

    final_df=pd.merge(df,df1,on='parent_id', how='inner')

但是这种自然连接的问题是,如果类型不止一个类型,它将不起作用。例如X和L之间的关系具有2个等级的层次结构,在这种情况下它不起作用

1 个答案:

答案 0 :(得分:1)

这是你在说什么吗?

df[df.type == 'product_level']

_id  parent_id  type
D    A          product_level
M    N          product_level
L    X          product_level

# Maybe I don't understand what you mean. I thought it was. 

In [2]: df = pd.DataFrame({"a":[1,2,3,4], "b":["x","t","s","g"], "x":["l1", "l3", "l1", "l2"]})

In [3]: df
Out[3]:
   a  b   x
0  1  x  l1
1  2  t  l3
2  3  s  l1
3  4  g  l2

In [4]: df[df.x=="l1"]
Out[4]:
   a  b   x
0  1  x  l1
2  3  s  l1