[英]Pandas rename operation change column name on two columns instead of one
我有一個如下所示的 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 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
對於我的分析,我需要執行一個導致兩個相同列名的數據透視操作。 我希望索引為 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.columns = ['post','pre'] + df.columns[2:].tolist()
編輯:
經過一些討論,最好不是刪除第一級,而是加入MultiIndex
級別以避免duplicated columns names
:
df = pd.concat([pre, post])
df = df.pivot('BIB#','DAG')
df.columns = df.columns.map('_'.join)
您將兩列重命名為相同值的原因是因為您的mapping
是通過在嘗試中始終引用具有相同str
內容的兩個列名來定義的(如下)。
mapping = {df.columns[0]:'post', df.columns[1]: 'pre'}
df = df.rename(columns=mapping)
此代碼基本上運行為“將內容與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
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.