Python 如何在熊猫的层次索引中使用输入列作为主要索引?
我的csv文件包含以下列:Python 如何在熊猫的层次索引中使用输入列作为主要索引?,python,pandas,indexing,dataframe,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
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的行。例如,如果主ID 4中的行的平均值低于0.5,那么我将消除这些行
我认为最好的方法是使用主索引,但如果有更好的方法,请告诉我。首先,您可以从
col1
创建列ID
,然后删除col1
然后,您可以在ID
列上使用DataFrame.groupby
,然后使用以获得所需的结果。范例-
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
作为索引,您可以使用传递'id'
的方法作为参数。这很酷!谢谢但是,即使我像你说的那样使用set\u index
添加该索引,我如何轻松地选择该主索引的所有行?i、 例如,在我的问题中,假设我想选择主索引1
的所有行?