我正在尝试添加两列并创建一个新列。此新列应成为数据框或输出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)
帮助肯定是值得赞赏的。
答案 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