我有一个1d数据帧,它用窗体的键索引。
i_n
在哪里
i
和
n
是字符串(为了这个例子,
我
是整数,并且
n
是一个字符)。这是一个简单的例子:
values
0_a 0.583772
1_a 0.782358
2_a 0.766844
3_a 0.072565
4_a 0.576667
0_b 0.503876
1_b 0.352815
2_b 0.512834
3_b 0.070908
4_b 0.074875
0_c 0.361226
1_c 0.526089
2_c 0.299183
3_c 0.895878
4_c 0.874512
现在,我想将这个数据框架重新安排为2d,这样数字(在下划线之前的索引名称部分)用作列名,字符(在下划线之后的索引部分)用作索引:
0 1 2 3 4
a 0.583772 0.782358 0.766844 0.0725654 0.576667
b 0.503876 0.352815 0.512834 0.0709081 0.0748752
c 0.361226 0.526089 0.299183 0.895878 0.874512
我有一个解决问题的方法(函数
convert_2d
但我想知道是否有一种更习惯的方法来实现这一点。这里是用于生成原始数据帧并将其转换为所需格式的代码:
import pandas as pd
import numpy as np
def convert_2d(df):
df2 = pd.DataFrame(columns=['a','b','c'], index=list(range(5))).T
names = set(idx.split('_')[1] for idx in df.index)
numbers = set(idx.split('_')[0] for idx in df.index)
for i in numbers:
for n in names:
df2[i][n] = df['values']['{}_{}'.format(i,n)]
return df2
##generating 1d example data:
data = np.random.rand(15)
indices = ['{}_{}'.format(i,n) for n in ['a','b','c'] for i in range(5)]
df = pd.DataFrame(
data, columns=['values']
).rename(index={i:idx for i,idx in enumerate(indices)})
print(df)
##converting to 2d
print(convert_2d(df))
关于索引键的一些注意事项:可以假定(就像在我的函数中一样)没有“丢失的键”(即总是可以实现二维数组),并且对于键来说,唯一可以想当然的是(单个)下划线(即,数字和字母仅是出于解释原因而选择的,实际上只有两个arbi用下划线连接的字符串)。