【问题标题】:creating new column with second header's string value使用第二个标题的字符串值创建新列
【发布时间】:2019-05-09 10:53:01
【问题描述】:

我有以下带有两个标头的数据框。我需要用我的第二个标题(工业数据集)的字符串值创建一个新列

Region           Industrial production                                                          
Italia           5669   
Nord-ovest       1046   
Piemonte         447 

我的最终输出需要是:

Industrial production   Region  Industrial production
Industrial production   Italia                   5669
Industrial production   Nord-ovest               1046
Industrial production   Piemonte                  447

【问题讨论】:

  • 它会说“工业生产”而不是别的?只需输出“工业生产”作为列的值。你已经知道该怎么做了。
  • 您需要重命名工业生产列之一
  • df.insert(0, 'Type', 'Industrial Production', allow_duplicates=True) 如果不是索引。
  • 作为评论:我正在上传多个具有奇怪数据组织的文件 - 主要识别信息之一 [工业生产] 在第二个标题中,而不是单独的列。其他文件不会有“工业生产,而是其他识别信息,例如人口或 GDP。这就是为什么我不能简单地重命名它。

标签: python string pandas header rename


【解决方案1】:

如果您想将其作为索引,则可以使用:

df.set_index([list(df.columns.values)[1]], inplace=True)。

这将取第二列,或者您可以直接写第二列标题的名称。代码将与此接近。 希望这会有所帮助

【讨论】:

    【解决方案2】:

    在 pandas 中,您不能有两个名称完全相同的列,如果您尝试创建另一个名为 Industrial production 的列,它将覆盖现有的列:

    In [2]: df
    Out[2]: 
           Region  Industrial production
    0      Italia                   5669
    1  Nord-ovest                   1046
    2    Piemonte                    447
    
    In [3]: second = df.columns[1]
    
    In [4]: second
    Out[4]: 'Industrial production'
    
    In [5]: df[second] = second
    
    In [6]: df
    Out[6]: 
           Region  Industrial production
    0      Italia  Industrial production
    1  Nord-ovest  Industrial production
    2    Piemonte  Industrial production
    

    您需要为这个新列指定一个不同的名称,例如Industrial production2。然后你可以按如下方式创建它:

    In [2]: df
    Out[2]: 
           Region  Industrial production
    0      Italia                   5669
    1  Nord-ovest                   1046
    2    Piemonte                    447
    
    In [3]: second = df.columns[1]
    
    In [3]: df[second + "2" ] = second
    
    In [4]: df
    Out[4]: 
           Region  Industrial production Industrial production2
    0      Italia                   5669  Industrial production
    1  Nord-ovest                   1046  Industrial production
    2    Piemonte                    447  Industrial production
    

    也可以使用df.assign,如下:

    In [3]: df
    Out[3]: 
           Region  Industrial production
    0      Italia                   5669
    1  Nord-ovest                   1046
    2    Piemonte                    447
    
    In [4]: df = df.assign(**{df.columns[1] + "2": df.columns[1]})
    
    In [5]: df
    Out[5]: 
           Region  Industrial production Industrial production2
    0      Italia                   5669  Industrial production
    1  Nord-ovest                   1046  Industrial production
    2    Piemonte                    447  Industrial production
    

    【讨论】:

    • 如何将 Industrial production2 移动到数据框的第一列?重新索引?
    • @FilippoSebastio 最简单的方法是这个df = df[["Industrial production2", "Region", "Industrial production"]]
    猜你喜欢
    • 2021-07-28
    • 2015-02-22
    • 2016-03-29
    • 2011-02-16
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    相关资源
    最近更新 更多