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

时间:2019-08-15 18:06:41

标签: python pandas replace duplicates fillna

我需要在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

在我的示例数据帧中,如果父母有孩子并且父母有宠物(仅在这种情况下是狗),我想转换数据并插入行。我想要以下最终结果。

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',则在相应的父级下方添加一行,内容为'Child;' +家长姓名。 如果是Pet =='dog',则添加另一个,在child下方添加一行,内容为'Dog; '+父母的名字。

稍后我将使用df.drop删除订单,子级和宠物列。

1 个答案:

答案 0 :(得分:0)

像这样的事情对您有用吗,或者您需要数据模型有所不同?

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