在Python中添加两列

时间:2018-03-22 01:29:34

标签: python python-3.x pandas dataframe

我正在尝试添加两列并创建一个新列。此新列应成为数据框或输出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)

帮助肯定是值得赞赏的。

3 个答案:

答案 0 :(得分:3)

创建示例数据

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

方法1 :使用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

方法2 :创建新系列,然后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

方法3 Insert数据框第一个索引处的新值(即第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是一个关键字,因此您不希望将其用作变量名。

答案 1 :(得分:2)

不要使用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 :(得分:0)

您可以使用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