【问题标题】:Adding calculated column in Pandas在 Pandas 中添加计算列
【发布时间】:2018-01-05 16:22:15
【问题描述】:

我有一个包含 10 列的数据框。我想添加一个新列“age_bmi”,它应该是一个乘以“age”*“bmi”的计算列。 age 是一个 INT,bmi 是一个 FLOAT。

然后创建具有 11 列的新数据框。

我正在做的事情不太对劲。我认为这是一个语法问题。有什么想法吗?

谢谢

df2['age_bmi'] = df(['age'] * ['bmi'])
print(df2)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您已将 age 和 bmi 组合在一个括号内,并将 df 视为函数而不是数据框。这里应该使用df来调用列作为DataFrame的属性-

    df2['age_bmi'] = df['age'] *df['bmi']
    

    【讨论】:

      【解决方案2】:

      正如 Cory 所指出的,您将数据帧作为函数调用,这不会像您期望的那样工作。这里有 4 种方法来合并两列,在大多数情况下,您会使用第一种方法。

      In [299]: df['age_bmi'] = df.age * df.bmi
      

      或者,

      In [300]: df['age_bmi'] = df.eval('age*bmi')
      

      或者,

      In [301]: df['age_bmi'] = pd.eval('df.age*df.bmi')
      

      或者,

      In [302]: df['age_bmi'] = df.age.mul(df.bmi)
      

      【讨论】:

        【解决方案3】:

        试试df2['age_bmi'] = df.age * df.bmi

        当您需要获取列的值时,您正在尝试将数据框作为函数调用,如果它是没有空格的小写名称,则可以通过键(如字典)或属性访问匹配一个内置的 DataFrame 方法。

        前几天有人在评论中链接了这个,非常棒。我建议给它一个手表,即使你不做练习:https://www.youtube.com/watch?v=5JnMutdy6Fw

        【讨论】:

        • 非常感谢 Cory,我也会看看那个视频
        • 到目前为止,我查看了该视频的第一个小时,太棒了。谢谢你的链接!这家伙的教学很流畅
        • 太棒了,很高兴你喜欢它。我自己还在看,但在第一个小时里,我就像“哦,嘘!”就像对你可以用它做的很酷的事情感到敬畏 3 次一样。
        • 这给了我一个错误,df2 未定义,或者如果我使用df,它会说:```SettingWithCopyWarning:试图在一个切片的副本上设置一个值数据框。尝试改用 .loc[row_indexer,col_indexer] = value 查看文档中的警告:pandas.pydata.org/pandas-docs/stable/user_guide/…
        • 有没有办法自动计算列?就像在excel之类的列中一样?在哪里影响一列或一行会自动影响依赖它们的其他列中的值?无需在框架上运行应用或任何显式操作?
        猜你喜欢
        • 2020-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多