我需要在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删除订单,子级和宠物列。
答案 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