首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过迭代列索引将df列重命名为具有相同名称的df列。

通过迭代列索引将df列重命名为具有相同名称的df列。
EN

Stack Overflow用户
提问于 2019-02-15 21:23:06
回答 2查看 126关注 0票数 1

我有这样一个pandas数据框架,

代码语言:javascript
复制
   Name     Not_Included  Quantity Not_Included  
0  Auto     DNS           10       DNS
1  NaN      DNS           12       DNS
2  Rtal     DNS           18       DNS
3  NaN      DNS           14       DNS
4  Indl     DNS           16       DNS
5  NaN      DNS           18       DNS

现在,我希望使用数据帧的列索引重命名Not_Included。所以,我得到这样的输出,

代码语言:javascript
复制
       Name     Not_Included_1  Quantity Not_Included_3  
    0  Auto     DNS             10       DNS
    1  NaN      DNS             12       DNS
    2  Rtal     DNS             18       DNS
    3  NaN      DNS             14       DNS
    4  Indl     DNS             16       DNS
    5  NaN      DNS             18       DNS

我试过以下几种方法

代码语言:javascript
复制
for c,v in enumerate(s_df):
    if v == 'Not_Included':
        vi = 'Not_Included' + str(c)
        s_df.rename(columns=lambda n: n.replace(v, vi), inplace=True)

我得到了以下结果,

代码语言:javascript
复制
    Name    Not_Included31  Quantity  Not_Included31
0   Auto    DNS             10        DNS
1   NaN     DNS             12        DNS
2   Rtal    DNS             18        DNS
3   NaN     DNS             14        DNS
4   Indl    DNS             16        DNS
5   NaN     DNS             18        DNS

posts来重命名整个数据帧的列,但这不是我想要的,因为我正在自动化一些任务。如何使用列索引获得所需的输出?

另外,我可以用列表理解的方法来重命名熊猫栏吗?

任何想法都会很好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-15 21:32:40

可以使用np.where设置列,检查其复制的位置。

代码语言:javascript
复制
import numpy as np

df.columns = np.where(df.columns.duplicated(),  
                      [f'{df.columns[i]}_{i}' for i in range(len(df.columns))],
                      df.columns)

索引还有一个where方法:

代码语言:javascript
复制
df.columns = df.columns.where(~df.columns.duplicated(),
                              [f'{df.columns[i]}_{i}' for i in range(len(df.columns))])

输出:

代码语言:javascript
复制
   Name Not_Included  Quantity Not_Included_3
0  Auto          DNS        10            DNS
1   NaN          DNS        12            DNS
2  Rtal          DNS        18            DNS
票数 2
EN

Stack Overflow用户

发布于 2019-02-15 21:45:51

这也能起作用

代码语言:javascript
复制
df.columns = ['{}_{}'.format(coluna, index) if 'Not_Included' in coluna else coluna for index, coluna in enumerate(df.columns)]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54717242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档