【问题标题】:Renaming column in pandas dataframe if condition is met如果满足条件,则重命名熊猫数据框中的列
【发布时间】:2019-09-06 23:50:25
【问题描述】:

我试图弄清楚如果满足某些条件是否可以重命名列标题。我有一个熊猫数据框:

import pandas as pd

data = [[1,'Joe', '2018', 5,7,9]]

df = pd.DataFrame(data, columns = ['ID', 'Name', 'Year', 'FallScore', 'WinterScore', 'SpringScore'])

print(df)
   ID Name  Year  FallScore  WinterScore  SpringScore
0   1  Joe  2018          5            7            9

如果列中包含“Fall”、“Winter”或“Spring”,则将字符串“NEW”添加到列标题的末尾。这是所需输出的样子。

df_desired = pd.DataFrame(data, columns = ['ID', 'Name', 'Year', 'FallScoreNEW', 'WinterScoreNEW', 'SpringScoreNEW'])

print(df_desired)
   ID Name  Year  FallScoreNEW  WinterScoreNEW  SpringScoreNEW
0   1  Joe  2018             5               7               9

我能够获得每个术语的布尔值数组,但无法弄清楚如果找到“秋季”、“冬季”或“春季”,如何替换列标题。请注意,我不知道实际的列标题,我只知道它们将包含“Fall”、“Winter”或“Spring”

我得到一个布尔值数组的方法在这里:

df.columns.str.contains('Fall')
df.columns.str.contains('Winter')
df.columns.str.contains('Spring')

任何帮助将不胜感激!

【问题讨论】:

    标签: python pandas dataframe rename


    【解决方案1】:

    您可以将rename 与 lambda 一起使用:

    df.rename(lambda x: x + 'NEW' if any(k in x for k in keys) else x, axis=1)
    
       ID Name  Year  FallScoreNEW  WinterScoreNEW  SpringScoreNEW
    0   1  Joe  2018             5               7               9
    

    如果您不希望仅为重命名操作返回数据副本,这也可以用作列表推导式。

    df.columns = [x + 'NEW' if any(k in x for k in keys) else x for x in df]
    df
    
       ID Name  Year  FallScoreNEW  WinterScoreNEW  SpringScoreNEW
    0   1  Joe  2018             5               7               9
    

    【讨论】:

    • 谢谢!正是我想要的!
    • 这里,keys 指的是一个字符串列表,每个字符串是一个季节。
    猜你喜欢
    • 2020-11-26
    • 1970-01-01
    • 2020-06-08
    • 2020-11-09
    • 2017-09-10
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多