需要根据另一列的条件添加一行

Need to add a row based off criteria from another column

我需要在我的 df 中添加一行,其中包含基于另一列的不符合条件的某些文本。根据列标准,将在该特定行下添加一行。

ID     Name      Order    Children   Pet  
12     Joe       Parent     yes      dog
13     Mary      Parent     yes      cat
14     Paul      Parent     yes      dog
15     Emma      Parent     yes      cat

在我的示例数据框中,如果 parent 有一个 child 并且 parent 有一只宠物(狗只适用于此),我想转换数据并插入行案件)。我想要以下最终结果。

ID     Name         Order    Children   Pet  
12     Parent; Joe  Parent     yes      dog
12     Child; Joe
12     Dog; Joe
13     Parent; Mary Parent     yes      cat
13     Child; Mary
14     Parent; Paul Parent     yes      dog
14     Child; Paul
14     Dog; Paul
15     Parent; Emma Parent     yes      cat
15     Child; Emma

添加前缀

df['Name'] = 'Parent; ' + df['Name'].astype(str)

在那之后,我尝试复制 df,然后堆叠 df - 它有效,但这是一种令人筋疲力尽的方法。所以我想改用 if 语句。 如果 Child == 'yes',请在适当的 parent 下方添加一行,内容为 'Child;' + parent 名称。 然后另一个 if if Pet == 'dog',在 child 下方添加行 'Dog; ' + parent name。

后面我会用一个df.drop来去掉订单,children和pet栏目

这样的东西对您有用吗?或者您需要不同的数据模型?

In [1]:
import pandas as pd
##Create Dataframe
cols = ['Name', 'Order', 'Children', 'Pet']  
data = [['Joe', 'Parent', 'yes', 'dog'],
        ['Mary', 'Parent', 'yes', 'cat'],
        ['Paul', 'Parent', 'yes', 'dog'],
        ['Emma', 'Parent', 'yes', 'cat']
       ]
df = pd.DataFrame(data=data, columns=cols)

## Split in as many group as we want
Parent = 'Parent; ' + df['Name']
Child = 'Child ; ' + df.loc[df['Children']=='yes', 'Name']
Dog = 'Dog ; ' + df.loc[df['Pet']=='dog', 'Name']
## Concatenate them
df_final = pd.concat([Parent, Child, Dog])
df_final.to_frame().sort_index()

Out [1]:
    Name
0   Parent; Joe
0   Child ; Joe
0   Dog ; Joe
1   Parent; Mary
1   Child ; Mary
2   Parent; Paul
2   Child ; Paul
2   Dog ; Paul
3   Parent; Emma
3   Child ; Emma