Python 基于列值和映射列名拆分熊猫中的行

Python 基于列值和映射列名拆分熊猫中的行,python,pandas,Python,Pandas,我有一个数据框,有两列:人名和公司名。我想再创建两个名为Name和Name\u Type的列。姓名将是“个人”和“公司名称”的concat,而“姓名类型”列将确定姓名是“个人类型”还是“公司类型”。某些行具有空字符串,这会产生四种可能性: 1) 空人员+空公司=可以为空 2) 空人员+公司名称=公司名称值 3) 人名+空人名=人名值 4) 两个名称=将它们分成两行。我不知道该怎么做 我是Python和熊猫的初学者,我在网上还没有找到答案。希望能在这里找到些什么。请原谅格式或其他错误 输入: df

我有一个数据框,有两列:人名和公司名。我想再创建两个名为Name和Name\u Type的列。姓名将是“个人”和“公司名称”的concat,而“姓名类型”列将确定姓名是“个人类型”还是“公司类型”。某些行具有空字符串,这会产生四种可能性:

1) 空人员+空公司=可以为空

2) 空人员+公司名称=公司名称值

3) 人名+空人名=人名值

4) 两个名称=将它们分成两行。我不知道该怎么做

我是Python和熊猫的初学者,我在网上还没有找到答案。希望能在这里找到些什么。请原谅格式或其他错误

输入:

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