尝试连接字符串与整数但不需要的值将被添加

时间:2016-10-04 07:33:55

标签: python dataframe

我有一个包含2列的Dataframe,我正在尝试创建一个新列column3,其逻辑连接column1(String)和column2(int)的值分隔符(' _')。

以下是数据帧的几个初始值:

    column1  column2
  0  Andy     1
  1  Ashok    4
  2  Collins  7

以下是我的几次尝试:

df['column3'] = df['column1'].apply(lambda x: x + '_' + str(df['column2']))

df['column3'] = df['column1'] + '_' + str(df['column2'])

df['column3'] = pd.Series(df['column1']).str.cat(str(df['column2']), sep='_')

结果如下:

0       Andy_0       2\n1       2\n2       1\n3     ...
1       Ashok_0       2\n1       2\n2       1\n3    ...
2       Collins_0       2\n1       2\n2       1\n3  ...

但是(2\n1 2\n2 1\n3 ...)被添加到结果column3值中,并且只有一个值零(0)被附加到结果column3。

请告诉我哪里出了问题?

2 个答案:

答案 0 :(得分:1)

你不需要让它如此复杂。数据帧支持这样的操作:

df.column1 + "_" + df.column2.astype("str")

答案 1 :(得分:0)

你想要这个:

def concat_cols(row):
    return "{}_{}".format(row['column1'], row['column2'])

df['column3'] = df.apply(concat_cols, axis = 1)

关键方面是axis = 1,它以行方式而非列方式查看数据帧。在上面的代码中,lambda函数中的df['column2']指的是整个列,而不仅仅是行的值。