为已被set\u index()更改的数据帧提供正常索引

2024-09-29 17:17:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,看起来像这样:

    Priority    RID_solve   Prob    RID_prob    Remarks
0      1          5001      34.4%     5040     Caution: FIDs are different
1      1          5001      38.5%     5057     Caution: FIDs are different
2      1          5001      3.3%      5056     Caution: FIDs are different
3      2          5002      74.0%     5057     Caution: FIDs are different
4      2          5002      87.6%     5056     Caution: FIDs are different
5      3          5003      89.4%     5056     Same FID
6      3          5003      89.4%     5056     Caution: FIDs are different

然后我使用set_index()对相似的PriorityRID_solve数据进行分组,这样就可以消除重复。这是我写的代码:

df1 = df.set_index(['Priority', 'RID_solve', 'Prob', 'RID_prob', 'Remarks']).sort_values(by=['Priority'], ascending = True)

给出如下数据:

enter image description here

这正是我想要的。但我也需要以0开头的正常索引。到目前为止,我还不知道如何得到它。我试过reset_index(),但那只是把我的数据改回原来的形式

有没有办法保持上述格式不变并获得索引呢


Tags: 数据indexaresameprioritysetsolvedifferent
1条回答
网友
1楼 · 发布于 2024-09-29 17:17:56

Then I use set_index() to group the similar Priority and RID_solve data so that the repetition could be removed.

不,你错了。重复不会被删除,只是不会显示,所以您必须决定是需要MulitIndex还是默认RangeIndex

您可以检查:

df = pd.DataFrame({
        'A':list('abcdef'),
         'B':[4,5,4,5,5,4],
         'C':[1] * 6,
         'F':list('aaabbb')
})

df = df.set_index(['C','B', 'A'])
print (df)
       F
C B A   
1 4 a  a
  5 b  a
  4 c  a
  5 d  b
    e  b
  4 f  b

with pd.option_context('display.multi_sparse', False):
    print (df)
       F
C B A   
1 4 a  a
1 5 b  a
1 4 c  a
1 5 d  b
1 5 e  b
1 4 f  b

编辑:

如有必要,可以用缺少的值替换重复的值:

df = pd.DataFrame({
         'A':[1] * 6,
         'B':[4,5,4,5,5,4],
         'C':list('abcdef'),
         'F':list('aaabbb')
})

cols = ['A','B', 'C']
m = df[cols].apply(lambda x: x.duplicated())


df[cols]= df[cols].mask(m, '')
print (df)
   A  B  C  F
0  1  4  a  a
1     5  b  a
2        c  a
3        d  b
4        e  b
5        f  b

但如果复制项不在第一列中,仅在第二列或更多列中,则获取:

df = pd.DataFrame({
        'A':list('abcdef'),
         'B':[4,5,4,5,5,4],
         'C':[1] * 6,
         'F':list('aaabbb')
})


cols = ['A','B', 'C']
m = df[cols].apply(lambda x: x.duplicated())


df[cols]= df[cols].mask(m, '')
print (df)

   A  B  C  F
0  a  4  1  a
1  b  5     a
2  c        a
3  d        b
4  e        b
5  f        b

相关问题 更多 >

    热门问题