Python 基于列值和映射列名拆分熊猫中的行
我有一个数据框,有两列:人名和公司名。我想再创建两个名为Name和Name\u Type的列。姓名将是“个人”和“公司名称”的concat,而“姓名类型”列将确定姓名是“个人类型”还是“公司类型”。某些行具有空字符串,这会产生四种可能性: 1) 空人员+空公司=可以为空 2) 空人员+公司名称=公司名称值 3) 人名+空人名=人名值 4) 两个名称=将它们分成两行。我不知道该怎么做 我是Python和熊猫的初学者,我在网上还没有找到答案。希望能在这里找到些什么。请原谅格式或其他错误 输入:Python 基于列值和映射列名拆分熊猫中的行,python,pandas,Python,Pandas,我有一个数据框,有两列:人名和公司名。我想再创建两个名为Name和Name\u Type的列。姓名将是“个人”和“公司名称”的concat,而“姓名类型”列将确定姓名是“个人类型”还是“公司类型”。某些行具有空字符串,这会产生四种可能性: 1) 空人员+空公司=可以为空 2) 空人员+公司名称=公司名称值 3) 人名+空人名=人名值 4) 两个名称=将它们分成两行。我不知道该怎么做 我是Python和熊猫的初学者,我在网上还没有找到答案。希望能在这里找到些什么。请原谅格式或其他错误 输入: df
df = pd.DataFrame({"Person_name": ["Aaron", "", "Phil", "Joe"],
"Company_name": ["", "XYZ Inc", "ABC LLC", ""]})
Company_name Person_name
0 Aaron
1 XYZ Inc
2 ABC LLC Phil
3 Joe
预期产出:
Company_name Person_name Name Name_Type
0 Aaron Aaron Person_name
1 XYZ Inc XYZ Inc Company_name
2 ABC LLC Phil Phil Person_name
2 ABC LLC Phil ABC LLC Company_name
3 Joe Joe Person_name
您可以使用
apply
、unstack
和merge
df = pd.DataFrame({"Person_name": ["Aaron", "", "Phil", "Joe"],
"Company_name": ["", "XYZ Inc", "ABC LLC", ""]})
def logic(row):
if row.Company_name and row.Person_name:
return pd.Series([[row.Person_name, "Person_name"], [row.Company_name, "Company_name"]])
else:
return pd.Series([[row.Person_name, "Person_name"] if row.Person_name else [row.Company_name, "Company_name"]])
df2 = df.apply(logic, 1).unstack().apply(pd.Series).dropna().reset_index().set_index("level_1").sort_index()
dff = pd.merge(df,df2, left_index=True, right_index=True).iloc[:, [0,1,3,4]]
dff.columns = ["Company_name", "Person_name", "Name", "Name_Type"]
输出
Company_name Person_name Name Name_Type
0 Aaron Aaron Person_name
1 XYZ Inc XYZ Inc Company_name
2 ABC LLC Phil Phil Person_name
2 ABC LLC Phil ABC LLC Company_name
3 Joe Joe Person_name
使用:
输出:
Name_Type Name Person_name Company_name
index
0 Person_name Aaron Aaron
1 Company_name XYZ Inc XYZ Inc
2 Person_name Phil Phil ABC LLC
2 Company_name ABC LLC Phil ABC LLC
3 Person_name Joe Joe
发布一个输入/输出示例你能生成一个吗?@RafaelC请看一看示例image@HarvIpan请看一看样本图片没有图片,只有我们可以复制和粘贴的代码/文本。
Name_Type Name Person_name Company_name
index
0 Person_name Aaron Aaron
1 Company_name XYZ Inc XYZ Inc
2 Person_name Phil Phil ABC LLC
2 Company_name ABC LLC Phil ABC LLC
3 Person_name Joe Joe