【问题标题】:Adding two columns in Python在 Python 中添加两列
【发布时间】:2018-08-31 07:50:38
【问题描述】:

我正在尝试添加两列并创建一个新列。这个新列应该成为数据框或输出 csv 文件中的第一列。

column_1 column_2
84       test
65       test

输出应该是

column         column_1 column_2
trial_84_test   84      test
trial_65_test   65      test

我尝试了以下给定的方法,但它们不起作用:

sum = str(data['column_1']) + data['column_2']

data['column']=data.apply(lambda x:'%s_%s_%s' % ('trial' + data['column_1'] + data['column_2']),axis=1)

当然感谢您的帮助。

【问题讨论】:

    标签: python python-3.x string pandas dataframe


    【解决方案1】:

    不要为此使用lambda,因为它只是一个隐蔽的循环。这是一个矢量化的解决方案。需要注意将非字符串值转换为str 类型。

    df['column'] = 'trial_' + df['column_1'].astype(str) + '_' + df['column_2']
    
    df = df.reindex_axis(sorted(df.columns), axis=1)  # sort columns alphabetically
    

    结果:

              column  column_1 column_2
    0  trial_84_test        84     test
    1  trial_65_test        65     test
    

    【讨论】:

    • 正是我要给出的答案!值得赞成并接受
    【解决方案2】:

    创建样本数据

    df = pd.DataFrame({'column_1': [84, 65], 'column_2': ['test', 'test']})
    

    方法一:使用assign新建列,然后重新排序。

    >>> df.assign(column=['trial_{}_{}'.format(*cols) for cols in df.values])[['column'] + df.columns.tolist()]
              column  column_1 column_2
    0  trial_84_test        84     test
    1  trial_65_test        65     test
    

    方法二:新建一个系列,然后concatenate

    s = pd.Series(['trial_{}_{}'.format(*cols) for cols in df.values], index=df.index, name='column')
    >>> pd.concat([s, df], axis=1)
              column  column_1 column_2
    0  trial_84_test        84     test
    1  trial_65_test        65     test
    

    方法 3Insert 数据框第一个索引处的新值(即第 0 列)。

    df.insert(0, 'column', ['trial_{}_{}'.format(*cols) for cols in df.values])
    >>> df
              column  column_1 column_2
    0  trial_84_test        84     test
    1  trial_65_test        65     test
    

    方法 3(为新列创建值的替代方法)

    df.insert(0, 'column', df.astype(str).apply(lambda row: 'test_' + '_'.join(row), axis=1))
    

    顺便说一句,sum 是一个关键字,所以你不想将它用作变量名。

    【讨论】:

      【解决方案3】:

      您可以使用insert

      df.insert(0,column='Columns',value='trial_' + df['column_1'].astype(str)+ '_'+df['column_2'].astype(str)
      )
      df
      Out[658]: 
               Columns  column_1 column_2
      0  trial_84_test        84     test
      1  trial_65_test        65     test
      

      【讨论】:

        猜你喜欢
        • 2011-12-18
        • 1970-01-01
        • 1970-01-01
        • 2022-11-03
        • 2022-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-26
        相关资源
        最近更新 更多