Python 根据位置为列名添加_后缀
我有一个数据集,我想根据列名的位置为它们添加后缀。对于ex-第1列到第4列应命名为“abc_1”,然后第5列到第8列应命名为“abc_2”,依此类推 我已尝试使用数据框。重命名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.
但这是一个耗时的过程。实现这一目标最有效的方法是什么 我认为这里是一个很好的选择创建
多索引
以避免重复的列名-创建一级按楼层除以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