重置熊猫中的重复多索引

时间:2017-09-27 10:48:55

标签: python pandas multi-index

我在python中有一个pandas数据框来自pd.concat,带有重复的多索引:

        customer_id
0   0   46841769
    1   4683936
1   0   8880872
    1   8880812
0   0   8880873
    1   1000521
1   0   1135488
    1   5388773

不,我只会重置multiIndex的第一个索引,以便在索引上获得重复的数字。像这样:

        customer_id
0   0   46841769
    1   4683936
1   0   8880872
    1   8880812
2   0   8880873
    1   1000521
3   0   1135488
    1   5388773

一般来说,我有大约5个Mio记录,而不是最大的机器。所以我正在寻找一种内存效率高的解决方案。

pd.concat中的

ignore_index = True不起作用,因为我失去了Multiindex。

非常感谢

1 个答案:

答案 0 :(得分:2)

您可以按get_level_values to_series转换第一级,然后将其与shift ed值进行比较,并为计数和上次使用添加cumsum MultiIndex.from_arrays:< / p>

a = df.index.get_level_values(0).to_series()
a = a.ne(a.shift()).cumsum() - 1

mux = pd.MultiIndex.from_arrays([a, df.index.get_level_values(1)], names=df.index.names)

df.index = mux

或者:

df = df.set_index(mux)
print (df)
     customer_id
0 0     46841769
  1      4683936
1 0      8880872
  1      8880812
2 0      8880873
  1      1000521
3 0      1135488
  1      5388773