将列连接为Pandas中的索引

时间:2013-07-23 20:20:00

标签: python pandas

我正在将文本文件导入pandas,并希望连接文件中的3个列以生成索引。

我愿意在一个或多个步骤中执行此操作。我可以在创建DataFrame的同时进行转换,或者我可以创建DataFrame并使用新创建的列重新构建它。知道如何这两种方式对我来说最有帮助。

我最终希望索引是连接前3列中值的值。

2 个答案:

答案 0 :(得分:11)

如果你的列由字符串组成,你可以使用+运算符(在字符串的上下文中添加它们是在python中连接它们,pandas跟随它):

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({'year':['2012', '2012'], 'month':['01', '02']})

In [3]: df
Out[3]:
  month  year
0    01  2012
1    02  2012

In [4]: df['concatenated'] = df['year'] + df['month']

In [5]: df
Out[5]:
  month  year concatenated
0    01  2012       201201
1    02  2012       201202

然后,如果创建了此列,则只需使用set_index来更改索引

In [6]: df = df.set_index('concatenated')

In [7]: df
Out[7]:
             month  year
concatenated
201201          01  2012
201202          02  2012

请注意,pd.concat不是为了连接字符串而是连接系列/数据帧,所以要将不同数据帧或系列的列或行一起添加到一个数据帧中(不是几行/列成一行/列)。有关详细说明,请参阅http://pandas.pydata.org/pandas-docs/dev/merging.html

答案 1 :(得分:1)

如果您使用read_csv导入文本文件,则可以pass a list of column names or numbers进行index_col参数。这将最终创建MultiIndex - 我不确定这是否适合您的应用程序。

如果要将索引显式连接在一起(假设它们是字符串),似乎可以使用+运算符执行此操作。 (警告,未经测试的代码)

df['concatenated'] = df['year'] + df['month']
df.set_index('concatenated')