Python 通过将两个稀疏列连接在一起,在Dataframe中创建新的密集列

Python 通过将两个稀疏列连接在一起,在Dataframe中创建新的密集列,python,pandas,while-loop,Python,Pandas,While Loop,我有一个包含三列的数据框架,“组织名称”、“类型”、“组织类型”“类型”和“组织类型”是一回事。我想创建一个名为“组织类型”的新列,该列采用“类型”列中的字符串,如果“类型”列为空,则采用“组织类型”列中的名称 Example of current dataframe: Name of Organization Type Type of Org Tyco Retail Retail Mac

我有一个包含三列的数据框架,“组织名称”、“类型”、“组织类型”“类型”和“组织类型”是一回事。我想创建一个名为“组织类型”的新列,该列采用“类型”列中的字符串,如果“类型”列为空,则采用“组织类型”列中的名称

Example of current dataframe:
Name of Organization     Type      Type of Org     
Tyco                     Retail    Retail          
Mac                      Service
Lis                                Comm
Ice                      Tech
Rex                      Retail    Retail


Example of New dataframe: 
Name of Organization     Type      Type of Org    Org Type
Tyco                     Retail    Retail         Retail
Mac                      Service                  Service
Lis                                Comm           Comm
Ice                      Tech                     Tech
Rex                      Retail    Retail         Retail

本质上,我试图将“类型”列和“组织类型”列连接在一起,以便创建一个完整的列,因为这两个列都缺少一些数据,但它们所拥有的数据将是相同的。如果有更好的方法来解决这些问题,我希望得到任何建议——只是不确定解决这个问题的最佳方法是什么?while循环?

一种方法是在对缺少的行进行子集设置之前,将
组织类型
列设置为
类型
列。如果
Type
列包含缺少的值(而不仅仅是空字符串),则应使用以下方法。如果它确实包含空字符串或类似内容,则可以在
Type
列与这些值相等的位置设置子集

df['Org Type'] = df['Type']
df.loc[df['Org Type'].isnull(), 'Org Type'] = \
    df.loc[df['Org Type'].isnull(), 'Type of Org']

一种方法是在对缺少的行进行子集设置之前,将
组织类型
列设置为
类型
列。如果
Type
列包含缺少的值(而不仅仅是空字符串),则应使用以下方法。如果它确实包含空字符串或类似内容,则可以在
Type
列与这些值相等的位置设置子集

df['Org Type'] = df['Type']
df.loc[df['Org Type'].isnull(), 'Org Type'] = \
    df.loc[df['Org Type'].isnull(), 'Type of Org']
此功能称为:

此功能称为:


如果一个字符串位于同一行的两列中,那么字符串是否总是相同的?@Charles Morris-是
df['Org Type']=numpy.where(df['Type'],df['Type'],df['Type'],df['Type of Org'])
@Paul H好的,这确实有效-非常感谢。唯一的问题是我真的撒谎了。似乎有一些“Type”中的字符串与“Type of Org”中的字符串不同。因此,代码实际上是为这些实例创建一个额外的行。因此,我的组织名称计数在增加。df['org_type']=np。其中(df['type'],df['type'],df['type'])或df['org_type']=np。其中(True,df['type'],df['type of org'])给出了所需的输出。如果任何一行有两个不同的值,df['Type']中的值优先如果一个字符串在同一行的两列中,字符串是否总是相同的?@Charles Morris-Yes
df['Org Type']=numpy.where(df['Type'],df['Type'],df['Type'],df['Type of Org'])
@Paul H好的,这是可行的,非常感谢。唯一的问题是我真的撒谎了。似乎有一些“Type”中的字符串与“Type of Org”中的字符串不同。因此,代码实际上是为这些实例创建一个额外的行。因此,我的组织名称计数在增加。df['org_type']=np。其中(df['type'],df['type'],df['type'])或df['org_type']=np。其中(True,df['type'],df['type of org'])给出了所需的输出。如果任何一行有两个不同的值,则df['Type']中的值取precedence@3Novak-但是,这也适用于与上述问题相同的情况。因为在极少数情况下,“Type”和“Type of Org”中的数据不一样,所以我需要对“Type”中的数据进行优先级排序。这段代码通过每次在“Type”和“Type of Org”中有两个不同的字符串时创建另一行来增加我在组织名称中的计数。啊,我明白了。在这种情况下,您应该接受@Boud的答案。它应该完全符合您的要求。@3Novak-这也适用,但与上面的问题相同。因为在极少数情况下,“Type”和“Type of Org”中的数据不一样,所以我需要对“Type”中的数据进行优先级排序。这段代码通过每次在“Type”和“Type of Org”中有两个不同的字符串时创建另一行来增加我在组织名称中的计数。啊,我明白了。在这种情况下,您应该接受@Boud的答案。它应该完全符合你的要求。@Boud-这很好,也很简单。但我仍然不明白为什么我原来的组织数量是154,而我的新组织数量现在是163。。。在154中有两次列出的组织ID。你认为python在某种程度上是复制的吗?不确定是否理解你的问题,你能详细说明一下吗?否则,如果是150行,只需转储这两个结果,像在Excel中一样打开它们并手动比较。您将很快找到不同之处并确定pattern@Boud-这很好,也很简单。但我仍然不明白为什么我原来的组织数量是154,而我的新组织数量现在是163。。。在154中有两次列出的组织ID。你认为python在某种程度上是复制的吗?不确定是否理解你的问题,你能详细说明一下吗?否则,如果是150行,只需转储这两个结果,像在Excel中一样打开它们并手动比较。您将很快找到不同之处并确定模式