如何在大熊猫的分层索引中使用输入列作为主要索引?

时间:2015-10-29 01:15:11

标签: python pandas indexing dataframe

我的csv文件包含以下列:

col1   col2

1      0.9
1      0.3
2      0.4
2      0.9
2      0.1
3      0.0
4      0.5
4      0.9

我将其放入数据框中,因此df自然会为所有行添加索引 我想将第一列保留为我的主要索引,并且在每个主要索引中都有一个小索引,例如:

ID       col1   col2

1      1        0.9
       2        0.3
2      1        0.4
       2        0.9
       3        0.1
3      1        0.0
4      1        0.5
       2        0.9

我该怎么做?

我的最终目标是能够消除某个主要ID的行。例如,如果Major ID 4中的行的平均值低于0.5,那么我将消除这些行。

我认为最好的方法是使用主要索引,但如果有更好的方法,请告诉我。

1 个答案:

答案 0 :(得分:1)

首先,您可以从ID创建列col1,然后删除col1

然后,您可以在DataFrame.groupby列上使用ID,然后使用.cumcount()获取所需的结果。示例 -

df['ID'] = df['col1']
df = df.drop('col1',axis=1)
df['col1'] = (df.groupby('ID').cumcount() + 1)

演示 -

In [20]: df
Out[20]:
   col1  col2
0     1   0.9
1     1   0.3
2     2   0.4
3     2   0.9
4     2   0.1
5     3   0.0
6     4   0.5
7     4   0.9

In [21]: df['ID'] = df['col1']

In [23]: df = df.drop('col1',axis=1)

In [24]: df['col1'] = (df.groupby('ID').cumcount() + 1)

In [25]: df
Out[25]:
   col2  ID  col1
0   0.9   1     1
1   0.3   1     2
2   0.4   2     1
3   0.9   2     2
4   0.1   2     3
5   0.0   3     1
6   0.5   4     1
7   0.9   4     2

在此之后,如果您希望id作为索引,则可以使用.set_index()方法传递'ID'作为参数。