Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.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 - Fatal编程技术网

Python 根据位置为列名添加_后缀

Python 根据位置为列名添加_后缀,python,pandas,Python,Pandas,我有一个数据集,我想根据列名的位置为它们添加后缀。对于ex-第1列到第4列应命名为“abc_1”,然后第5列到第8列应命名为“abc_2”,依此类推 我已尝试使用数据框。重命名 但这是一个耗时的过程。实现这一目标最有效的方法是什么 我认为这里是一个很好的选择创建多索引以避免重复的列名-创建一级按楼层除以4并添加前缀按f-strings: np.random.seed(123) df = pd.DataFrame(np.random.randint(10, size=(5, 10))) df.

我有一个数据集,我想根据列名的位置为它们添加后缀。对于ex-第1列到第4列应命名为“abc_1”,然后第5列到第8列应命名为“abc_2”,依此类推

我已尝试使用数据框。重命名

但这是一个耗时的过程。实现这一目标最有效的方法是什么

我认为这里是一个很好的选择创建
多索引
以避免重复的列名-创建一级按楼层除以
4
并添加前缀按
f-string
s:

np.random.seed(123)

df = pd.DataFrame(np.random.randint(10, size=(5, 10)))

df.columns = [[f'abc_{i+1}' for i in df.columns // 4], df.columns]
print (df)
  abc_1          abc_2          abc_3   
      0  1  2  3     4  5  6  7     8  9
0     2  2  6  1     3  9  6  1     0  1
1     9  0  0  9     3  4  0  0     4  1
2     7  3  2  4     7  2  4  8     0  7
3     9  3  4  6     1  5  6  2     1  8
4     3  5  0  2     6  2  4  4     6  3
如果列名中没有
RangeIndex
,则采用更通用的解决方案:

cols = [f'abc_{i+1}' for i in np.arange(len(df.columns)) // 4]
df.columns = [cols, df.columns]
print (df)
  abc_1          abc_2          abc_3   
      0  1  2  3     4  5  6  7     8  9
0     2  2  6  1     3  9  6  1     0  1
1     9  0  0  9     3  4  0  0     4  1
2     7  3  2  4     7  2  4  8     0  7
3     9  3  4  6     1  5  6  2     1  8
4     3  5  0  2     6  2  4  4     6  3
也可以通过以下方式指定多索引级别名称:

然后可以通过以下方式选择每个级别:


对不起,弄错了。我希望第1至第4列为“abc_1”,然后第5至第8列为“abc_2”,依此类推。
df.columns = pd.MultiIndex.from_arrays([cols, df.columns], names=('level0','level1'))
print (df)
level0 abc_1          abc_2          abc_3   
level1     0  1  2  3     4  5  6  7     8  9
0          2  2  6  1     3  9  6  1     0  1
1          9  0  0  9     3  4  0  0     4  1
2          7  3  2  4     7  2  4  8     0  7
3          9  3  4  6     1  5  6  2     1  8
4          3  5  0  2     6  2  4  4     6  3
print (df.xs('abc_2', axis=1))
   4  5  6  7
0  3  9  6  1
1  3  4  0  0
2  7  2  4  8
3  1  5  6  2
4  6  2  4  4