我的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,那么我将消除这些行。
我认为最好的方法是使用主要索引,但如果有更好的方法,请告诉我。
答案 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'
作为参数。