需要根据另一列的条件添加一行
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
我需要在我的 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