假设我有一个源自对称宽矩阵的长数据帧,例如就像本例中的date x Observation_unit
2015-01-01 2015-01-02 2015-01-03
1 0 1 3
… … …
N 2 2 3
…已经变成了像这样的长 df,
date observation_unit value
2015-01-01 1 0
2015-01-02 1 1
2015-01-03 1 3
…
2015-01-01 N 2
2015-01-02 N 2
2015-01-03 N 3
pandas 中将这些索引快速转换为从 1 开始的整数索引的最快方法是什么:
date observation_unit value
1 1 0
2 1 1
3 1 1
…
1 N 2
2 N 2
3 N 3
最佳答案
我认为最简单的是列是唯一的,分配由 arrange
创建的数组:
df.columns = np.arange(1,len(df.columns) + 1)
df = df.unstack()
对于多索引使用 factorize
如果值不唯一:
df.index = pd.MultiIndex.from_arrays([pd.factorize(df.index.get_level_values(0))[0] + 1,
df.index.get_level_values(1)], names=df.index.names)
print (df)
value
date observation_unit
1 1 0
2 1 1
3 1 3
1 N 2
2 N 2
3 N 3
或者:
df.index = [pd.factorize(df.index.get_level_values(0))[0] + 1,
df.index.get_level_values(1)]
print (df)
value
observation_unit
1 1 0
2 1 1
3 1 3
1 N 2
2 N 2
3 N 3
或者:
a = pd.factorize(df.index.levels[0])[0] + 1
df.index = pd.MultiIndex.from_product([a, df.index.levels[1]], names=df.index.names)
print (df)
value
date observation_unit
1 1 0
N 1
2 1 3
N 2
3 1 2
N 3
或更简单:
a = np.arange(1, len(df.index.levels[0]) + 1)
df.index = pd.MultiIndex.from_product([a, df.index.levels[1]], names=df.index.names)
print (df)
value
date observation_unit
1 1 0
N 1
2 1 3
N 2
3 1 2
N 3
关于python - 将对称混合类型多索引转换为整数多索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43662201/