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

Python 重命名操作更改两列而不是一列的列名

Python 重命名操作更改两列而不是一列的列名,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据框,看起来像这样: PRESTASJON PRESTASJON GRUPPE GRUPPE BIB# 1 1.097535 1.152557 RANDOM RANDOM 2 1.019290 1.060228 BLOCKED BLOCKED 3 1.078993 1.117647 BLOCKED BLOCK

我有一个熊猫数据框,看起来像这样:

      PRESTASJON  PRESTASJON   GRUPPE   GRUPPE
BIB#                                          
1       1.097535    1.152557   RANDOM   RANDOM
2       1.019290    1.060228  BLOCKED  BLOCKED
3       1.078993    1.117647  BLOCKED  BLOCKED
4       1.068155    1.136278  BLOCKED  BLOCKED
5       1.001602    1.049030  BLOCKED  BLOCKED
6       0.999831    1.086611   RANDOM   RANDOM
7       1.079463    1.129667   RANDOM   RANDOM
8       1.053904    1.122307   RANDOM   RANDOM
9       1.146811    1.156933  BLOCKED  BLOCKED
10      1.019548    1.086616  BLOCKED  BLOCKED
11      1.026948    1.085549  BLOCKED  BLOCKED
12      1.094309    1.130020   RANDOM   RANDOM
13      1.210418    1.197499  BLOCKED  BLOCKED
14      1.024908    1.054702   RANDOM   RANDOM
15      0.981332    1.003535   RANDOM   RANDOM
16      1.160070    1.204359   RANDOM   RANDOM

在我的分析中,我需要执行一个pivot操作,该操作会产生两个相同的列名。我希望索引为0的列名为“POST”,索引为1的列名为“PRE”

我试过:

mapping = {df.columns[0]:'post', df.columns[1]: 'pre'}
df = df.rename(columns=mapping)
但这会更改两列上的列名:

           pre       pre   GRUPPE   GRUPPE
BIB#                                      
1     1.097535  1.152557   RANDOM   RANDOM
2     1.019290  1.060228  BLOCKED  BLOCKED
3     1.078993  1.117647  BLOCKED  BLOCKED
4     1.068155  1.136278  BLOCKED  BLOCKED
5     1.001602  1.049030  BLOCKED  BLOCKED
6     0.999831  1.086611   RANDOM   RANDOM
7     1.079463  1.129667   RANDOM   RANDOM
8     1.053904  1.122307   RANDOM   RANDOM
9     1.146811  1.156933  BLOCKED  BLOCKED
10    1.019548  1.086616  BLOCKED  BLOCKED
11    1.026948  1.085549  BLOCKED  BLOCKED
12    1.094309  1.130020   RANDOM   RANDOM
13    1.210418  1.197499  BLOCKED  BLOCKED
14    1.024908  1.054702   RANDOM   RANDOM
15    0.981332  1.003535   RANDOM   RANDOM
16    1.160070  1.204359   RANDOM   RANDOM


,这不是我想要的。有人能告诉我一个好的解决方案吗?

您可以通过列表设置新的列:

df.columns = ['post1','pre1','post2', 'pre2']
或:

编辑:

经过一些讨论后,更好的方法不是删除第一级,而是加入
多索引
级别,以避免重复的列名称:

df = pd.concat([pre, post])
df = df.pivot('BIB#','DAG')

df.columns = df.columns.map('_'.join)
第一次尝试的问题 之所以将两列重命名为相同的值,是因为您的
映射是通过在尝试中始终引用具有相同
str
内容的两个列名来定义的(如下所示)

mapping={df.columns[0]:'post',df.columns[1]:'pre'}
df=df.rename(列=映射)
该代码基本上是“将内容与
df.columns[0]
相同的列重命名为
'post'
,然后将内容与
df.columns[1]
相同的列重命名为
'pre'
”。由于执行上述操作时,
df.columns[0]==df.columns[1]
,因此这两列都将被重命名-首先重命名为
'post'
,然后重命名为
'pre'

解决方案 因为您知道要重命名的列的索引,所以可以按如下所示通过索引显式重命名每个列

df.columns.values[0]=“post”
df.columns.values[1]=“pre”
在问题中概述的
df
上运行上述操作将导致:

post-pre-GRUPPE-GRUPPE
围嘴
1 1.097535 1.152557随机
2 1.019290 1.060228堵塞
3 1.078993 1.117647堵塞
4 1.068155 1.136278堵塞
5 1.001602 1.049030堵塞
6 0.999831 1.086611随机
7 1.079463 1.129667随机
8 1.053904 1.122307随机
9 1.146811 1.156933堵塞
10 1.019548 1.086616堵塞
11 1.026948 1.085549堵塞
12 1.094309 1.130020随机
13 1.210418 1.197499阻塞
14 1.024908 1.054702随机
15 0.981332 1.003535随机
16 1.160070 1.204359随机

如何创建这样的数据帧?也许应该有可能避免这个问题。我认为我没有使用最好的解决方案。但是我有两个类似的.csv文件,我已经将它们解析为一个数据帧。然后,我使用df=pd.concat([pre,post])将它们连接起来。接下来,我使用df=df.pivot('BIB#','DAG')。这导致了一个多索引。然后,我使用df.columns=df.columns.get_level_值(0)删除了第一个索引级别。我肯定这不是最好的方法:/但是为什么要删除多索引?我编辑答案来解决问题。是的,我想这可能是一个更好的解决方案。我想删除多索引,这样我就可以创建一个csv文件,以便在d3.js中轻松使用。没问题;)我只要求避免这个问题,这是可能的,所以工作,现在我知道为什么我的代码没有工作!
df = pd.concat([pre, post])
df = df.pivot('BIB#','DAG')

df.columns = df.columns.map('_'.join)