python - 需要根据另一列的条件添加一行
问题描述
我需要在我的 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;' + 父母姓名。然后另一个 if for if Pet == 'dog',在子项下方添加一行,内容为 'Dog; ' + 父级名称。
稍后我将使用 df.drop 删除 order、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
推荐阅读
- sql - 查询 IN 语句的最理想方式
- unity3d - 让我的 HoloLens 2 应用在智能手机上运行的最佳方式
- azure - Azure AD:尝试以编程方式更新应用程序时出现“Authorization_RequestDenied”
- laravel - 从 v-file-input 获取有关 Vuetify 更改的事件
- react-native - 如何告诉排毒等待我的元素出现
- .htaccess - .htaccess 重写一个正在传递参数的 URL
- javascript - 通过java脚本在HTML部分添加背景视频
- r - 创建具有特定值的新列
- node.js - 使用 NPM 工作区和 Lerna 在根目录安装 dev 依赖项
- parameter-passing - 如何为 Robot Framework 中的 SeleniumLibrary 中的关键字元素设置多个潜在参数