【问题标题】:combining multiple columns in a single line with headers as variables将单行中的多个列与标题作为变量组合
【发布时间】:2019-10-27 10:42:01
【问题描述】:

基本上我的问题是因此我有 5 列必须组合成第 6 列,该列排列所有数据(在本例中为 x)我想做的是将 Header 存储为某种变量读入类似于 .combine_first 的内容。我遇到的问题是 .combine 首先,以及我尝试使用的其他一些系列,只允许我一次组合一个东西,而不是读取我想要组合的所有列标题。当前的解决方案是单独组合每个元素并删除所有额外的列。最初我的问题是让 Nan 来填补,现在我只需要一种更快的方法来做我正在做的事情。

我需要什么

Var = Name1, Name2, Name3, Name4, Name5 

    something that combines all the elements

 My New Column

当前解决方案(有效但太长无法使用)

df['c'] = df['Name1'].combine_first(df['Name2'])
df['c1'] = df['c'].combine_first(df['Name3'])
df['c2'] = df['c1'].combine_first(df['Name4'])
df['Names'] = df['c2'].combine_first(df['Name5'])
df = df.drop(['Name1','Name2','Name3','Name4','Name5','c','c1','c2'], axis=1)

问题

       Name1    Name2   Name3   Name4   Name5

          X      NaN     NaN    NaN      NaN
          X      NaN     NaN    NaN      NaN
          X      NaN     NaN    NaN      NaN
        NaN       X      NaN    NaN      NaN
        NaN       X      NaN    NaN      NaN
        NaN       X      NaN    NaN      NaN
        NaN      NaN      X     NaN      NaN
        NaN      NaN      X     NaN      NaN
        NaN .    NaN      X     NaN      NaN
        NaN      NaN     NaN    X        NaN
        NaN      NaN     NaN    X        NaN
        NaN      NaN     NaN    X        NaN
        NaN      NaN     NaN    NaN       X
        NaN      NaN     NaN    NaN       X
        NaN      NaN     NaN    NaN       X

想要的结果

Names
0   X
1   X
2   X
3   X
4   X
5   X
6   X
7   X
8   X
9   X
10  X
11  X
12  X
13  X
14  X

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你可以试试下面的方法

    df['Names'] = df.apply(lambda x: ''.join(x.dropna().astype(str)),axis=1)
    

    如果您有多个项目,您可以在连接前在引号中添加分隔符。

    如果您尝试在一行中创建一个新数据框,您可以这样做:

    df2= pd.DataFrame(df.apply(lambda x: ''.join(x.dropna().astype(str)),axis=1), columns=['Names'])
    

    希望这会有所帮助!如果您有任何问题,请告诉我。

    编辑以映射列(我觉得有一种更优雅的方法可以做到这一点,但这很有效):

    dfRep = df.loc[:, 'a':'c'].replace('x', pd.Series(df.columns, df.columns))
    dfColMap = pd.DataFrame(dfRep.apply(lambda x: ''.join(x.dropna().astype(str)),axis=1), columns=['Map'])
    df2['Map'] = dfColMap['Map']
    

    【讨论】:

    • 这是我正在寻找的,但我需要能够从许多无组织的列中选择列名,因此需要一个我不知道该怎么做的标题名称变量
    • 一个选项可能是为它创建一个地图,例如创建第二个数据库,您可以在其中切换 x,然后合并所有内容。我将在上面进行编辑。
    • 在求解中使用了以下来源:stackoverflow.com/questions/37032043/…
    • 这就是我最终这样做的方式 (' Header1 = df[['Customer Name', 'CONTACT NAME']] Names = pd.DataFrame(Header1.apply(lambda x: ''. join(x.dropna().astype(str)),axis=1), columns=['Names']) ')
    【解决方案2】:

    如果您的列值是字符串,那么您可以这样做:

    df['Names'] = df.Name1 + df.Name2 + df.Name3 + df.Name4 + df.Name5
    

    您可以在名称之间添加空格或下划线:

    df.Name1 + ' ' + df.Name2 + '_' 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      相关资源
      最近更新 更多