我在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。
非常感谢
答案 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