假设我有一个来自对称宽矩阵的长数据帧,例如就像在这种情况下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
答案 0 :(得分:1)
我认为最简单的是列是唯一的由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
答案 1 :(得分:1)
最快的方法是使用(?<!growth )inhibition(.+)toxicity
pd.factorize
事实上,如果我开始使用的数据框df.date = pd.factorize(df.date)[0] + 1
df
date observation_unit value
0 1 1 0
1 2 1 1
2 3 1 3
3 1 N 2
4 2 N 2
5 3 N 3
等于以下
df
我会改变它:
2015-01-01 2015-01-02 2015-01-03
1 0 1 3
N 2 2 3