Python 连接熊猫中的字符串列

Python 连接熊猫中的字符串列,python,pandas,Python,Pandas,我有一个pandas数据框,希望连接两列,同时保持数据框中的所有其他列相同。根据文档,我尝试了以下方法: df['Code2']= df['Code'] + df['Period'] 然而,结果似乎对某些行几乎有效。而在其他行中,它根本不起作用 请参见下面“代码2”列中的结果 请注意,“期间”列中的值并不都等于2017年。在上面的摘录中,它们只是这样 预期结果如下: +---------+--------+--------------+ | Code | Period | Code

我有一个pandas数据框,希望连接两列,同时保持数据框中的所有其他列相同。根据文档,我尝试了以下方法:

df['Code2']= df['Code'] + df['Period']
然而,结果似乎对某些行几乎有效。而在其他行中,它根本不起作用

请参见下面“代码2”列中的结果

请注意,“期间”列中的值并不都等于2017年。在上面的摘录中,它们只是这样

预期结果如下:

+---------+--------+--------------+
|  Code   | Period |    Code2     |
+---------+--------+--------------+
| 1000000 |   2017 | 1000000_2017 |
| 1100000 |   2017 | 1100000_2017 |
| 1101000 |   2017 | 1101000_2017 |
| 1101100 |   2017 | 1101100_2017 |
| 1101110 |   2017 | 1101110_2017 |
+---------+--------+--------------+

这里是两列的数字相加。通过将这些字符串转换为字符串,可以将这些字符串连接起来,例如:

df['Code2'] = df['Code'].astype(str) + df['Period'].astype(str)
或者,如果要将其与下划线分隔开:

df['Code2'] = df['Code'].astype(str) + '_' + df['Period'].astype(str)

如果您有两个以上的列,一个好的解决方案是使用
str.join
agg
。将整型列转换为字符串,以便连接它们(而不是以算术方式添加它们)

对于两列数据,这也很好:

df['Code2'] = df.astype(str).agg('_'.join, axis=1)
df

      Code  Period         Code2
0  1000000    2017  1000000_2017
1  1100000    2017  1100000_2017
2  1101000    2017  1101000_2017
3  1101100    2017  1101100_2017
4  1101110    2017  1101110_2017

这两个是整数,而不是字符串,因此可以将它们相加。@WillemVanOnsem。哈,哇。有道理。我如何加入它们而不添加它们?
df['Code2'] = df['Code'].astype(str) + '_' + df['Period'].astype(str)
>>> df['Code2'] = df['Code'].astype(str) + '_' + df['Period'].astype(str)
>>> df
      Code  Period         Code2
0  1000000    2017  1000000_2017
1  1100000    2017  1100000_2017
2  1101000    2017  1101000_2017
3  1101100    2017  1101100_2017
4  1101110    2017  1101110_2017
df[['Code', 'Period']].astype(str).agg('_'.join, axis=1)

0    1000000_2017
1    1100000_2017
2    1101000_2017
3    1101100_2017
4    1101110_2017
dtype: object
df['Code2'] = df.astype(str).agg('_'.join, axis=1)
df

      Code  Period         Code2
0  1000000    2017  1000000_2017
1  1100000    2017  1100000_2017
2  1101000    2017  1101000_2017
3  1101100    2017  1101100_2017
4  1101110    2017  1101110_2017