Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用后缀列表复制行并重命名数据帧索引_Python_Pandas_Dataframe_Numpy_Indexing - Fatal编程技术网

Python 使用后缀列表复制行并重命名数据帧索引

Python 使用后缀列表复制行并重命名数据帧索引,python,pandas,dataframe,numpy,indexing,Python,Pandas,Dataframe,Numpy,Indexing,我有一个数据帧对象df,如下所示: p0p1p2p3p4p5p6p7p8p9p10p11p12p13 对象 南南1.01.01.01.01.01.01.01.01.01.01.01.01.01.0 B南南1.01.01.01.01.01.01.01.01.01.01.01.0 南南1.01.01.01.01.01.01.01.01.01.01.0 D南南1.0 1.0 1.0 1.0 1.0 1.0 1.0 鄂南1.01.01.01.0 F南南1.0 1.0 1.0 G南南1.0 1.0 我想

我有一个数据帧对象
df
,如下所示:

p0p1p2p3p4p5p6p7p8p9p10p11p12p13
对象
南南1.01.01.01.01.01.01.01.01.01.01.01.01.01.0
B南南1.01.01.01.01.01.01.01.01.01.01.01.0
南南1.01.01.01.01.01.01.01.01.01.01.0
D南南1.0 1.0 1.0 1.0 1.0 1.0 1.0
鄂南1.01.01.01.0
F南南1.0 1.0 1.0
G南南1.0 1.0
我想使用后缀列表复制每个后缀:

p0p1p2p3p4p5p6p7p8p9p10p11p12p13
对象
南南1.01.01.01.01.01.01.01.01.01.01.01.01.01.01.0
南南1.01.01.01.01.01.01.01.01.01.01.01.01.01.01.0
阿南1.01.01.01.01.01.01.01.01.01.01.01.01.01.01.0
阿努南1.01.01.01.01.01.01.01.01.01.01.01.01.01.01.0
A_XL南南1.01.01.01.01.01.01.01.01.01.01.01.01.0
南南1.01.01.01.01.01.01.01.01.01.01.01.01.01.0
B_XS南南1.01.01.01.01.01.01.01.01.01.01.0
美国南部1.01.01.01.01.01.01.01.01.01.01.01.01.0
伯明南1.01.01.01.01.01.01.01.01.01.01.01.01.0
布尔南1.01.01.01.01.01.01.01.01.01.01.01.01.0
B_XL南南1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
B南南1.01.01.01.01.01.01.01.01.01.01.01.0
南南1.01.01.01.01.01.01.01.01.0
南南大学1.01.01.01.01.01.01.01.01.0
昆南1.01.01.01.01.01.01.01.01.01.0
库南1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
C_XL南南1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
南南1.01.01.01.01.01.01.01.01.01.01.0
D_XS楠楠1.0 1.0 1.0 1.0 1.0 1.0
杜南南1.0 1.0 1.0 1.0 1.0 1.0 1.0
杜姆南1.01.01.01.01.01.0
杜南南1.0 1.0 1.0 1.0 1.0 1.0 1.0
D_XL南南1.0 1.0 1.0 1.0 1.0 1.0 1.0
D南南1.0 1.0 1.0 1.0 1.0 1.0 1.0
鄂南1.01.01.01.0
F南南1.0 1.0 1.0
G南南1.0 1.0
后缀列表是:
list\u of_后缀=['XS','S','M','L','XL','']
,必须更改的索引列表是:
list\u init=['A','B','C','D']

请注意,
E
F
G
与原始数据帧保持不变

根据这个答案:我能够根据后缀列表的长度,将初始数据帧
df
中所需的行复制到正确的数字:

list_init=['A','B','C','D']
后缀列表=['XS','S','M','L','XL','']
reps=[len(后缀列表),如果列表中的k在df.index中的k在init中为1]
df=df.loc[np.重复(df.index.values,reps)]
但是现在我所有的数据帧索引都是一个由10个
A
B
C
D
组成的数组(除了
E
F
G
,其中只有一行),我希望它们遵循
列表中的后缀模式,如上图所示

我怎样才能以出色的表现优雅地做到这一点


(注意:如果从包含索引的列开始工作要好得多,那也没关系,因为索引列中我的对象
a
B
C
D
E
F
G
以前来自一个名为
objects
的独立列).

您应该首先计算一个包含每行新索引的列表,然后分解该列表:

newvals = [['{}{}'.format(i,j) for j in ('_' + k if k != '' else k
                                         for k in list_of_suffixes)]
           if i in list_init else [i] for i in df.index]
df.reset_index().assign(object=newvals).explode('object').set_index('object')
如预期所示:

        P0  P1  P2  P3  P4  P5   P6   P7   P8   P9  P10  P11  P12  P13
object                                                                
A_XS   NaN NaN NaN NaN NaN NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0
A_S    NaN NaN NaN NaN NaN NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0
A_M    NaN NaN NaN NaN NaN NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0
A_L    NaN NaN NaN NaN NaN NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0
A_XL   NaN NaN NaN NaN NaN NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0
A      NaN NaN NaN NaN NaN NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0
B_XS   NaN NaN NaN NaN NaN NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0
B_S    NaN NaN NaN NaN NaN NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0
B_M    NaN NaN NaN NaN NaN NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0
B_L    NaN NaN NaN NaN NaN NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0
B_XL   NaN NaN NaN NaN NaN NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0
B      NaN NaN NaN NaN NaN NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0
C_XS   NaN NaN NaN NaN NaN NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0
C_S    NaN NaN NaN NaN NaN NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0
C_M    NaN NaN NaN NaN NaN NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0
C_L    NaN NaN NaN NaN NaN NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0
C_XL   NaN NaN NaN NaN NaN NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0
C      NaN NaN NaN NaN NaN NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0
D_XS   NaN NaN NaN NaN NaN NaN  NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0
D_S    NaN NaN NaN NaN NaN NaN  NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0
D_M    NaN NaN NaN NaN NaN NaN  NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0
D_L    NaN NaN NaN NaN NaN NaN  NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0
D_XL   NaN NaN NaN NaN NaN NaN  NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0
D      NaN NaN NaN NaN NaN NaN  NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0
E      NaN NaN NaN NaN NaN NaN  NaN  NaN  NaN  NaN  1.0  1.0  1.0  1.0
F      NaN NaN NaN NaN NaN NaN  NaN  NaN  NaN  NaN  NaN  1.0  1.0  1.0
G      NaN NaN NaN NaN NaN NaN  NaN  NaN  NaN  NaN  NaN  NaN  1.0  1.0

您应该首先计算包含每行新索引的列表,然后分解该列表:

newvals = [['{}{}'.format(i,j) for j in ('_' + k if k != '' else k
                                         for k in list_of_suffixes)]
           if i in list_init else [i] for i in df.index]
df.reset_index().assign(object=newvals).explode('object').set_index('object')
如预期所示:

        P0  P1  P2  P3  P4  P5   P6   P7   P8   P9  P10  P11  P12  P13
object                                                                
A_XS   NaN NaN NaN NaN NaN NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0
A_S    NaN NaN NaN NaN NaN NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0
A_M    NaN NaN NaN NaN NaN NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0
A_L    NaN NaN NaN NaN NaN NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0
A_XL   NaN NaN NaN NaN NaN NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0
A      NaN NaN NaN NaN NaN NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0
B_XS   NaN NaN NaN NaN NaN NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0
B_S    NaN NaN NaN NaN NaN NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0
B_M    NaN NaN NaN NaN NaN NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0
B_L    NaN NaN NaN NaN NaN NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0
B_XL   NaN NaN NaN NaN NaN NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0
B      NaN NaN NaN NaN NaN NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0  1.0
C_XS   NaN NaN NaN NaN NaN NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0
C_S    NaN NaN NaN NaN NaN NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0
C_M    NaN NaN NaN NaN NaN NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0
C_L    NaN NaN NaN NaN NaN NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0
C_XL   NaN NaN NaN NaN NaN NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0
C      NaN NaN NaN NaN NaN NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0  1.0
D_XS   NaN NaN NaN NaN NaN NaN  NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0
D_S    NaN NaN NaN NaN NaN NaN  NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0
D_M    NaN NaN NaN NaN NaN NaN  NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0
D_L    NaN NaN NaN NaN NaN NaN  NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0
D_XL   NaN NaN NaN NaN NaN NaN  NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0
D      NaN NaN NaN NaN NaN NaN  NaN  NaN  NaN  1.0  1.0  1.0  1.0  1.0
E      NaN NaN NaN NaN NaN NaN  NaN  NaN  NaN  NaN  1.0  1.0  1.0  1.0
F      NaN NaN NaN NaN NaN NaN  NaN  NaN  NaN  NaN  NaN  1.0  1.0  1.0
G      NaN NaN NaN NaN NaN NaN  NaN  NaN  NaN  NaN  NaN  NaN  1.0  1.0