【问题标题】:Creating multiple new dataframe columns through function [duplicate]通过函数创建多个新的数据框列[重复]
【发布时间】:2019-09-18 07:40:28
【问题描述】:

我正在尝试使用一个函数创建多个新的数据框列。但是,当我运行下面的简单代码时,我收到错误消息“KeyError:”['AdjTime1' 'AdjTime2'] not in index。”

如何更正此问题以将两个新列(“AdjTime1”和“AdjTime2”)添加到我的数据框中?

谢谢!

import pandas as pd

df = pd.DataFrame({'Runner':['Wade','Brian','Jason'],'Time':[80,75,98]})

def adj_speed(row):
    adjusted_speed1 = row['Time']*1.5
    adjusted_speed2 = row['Time']*2.0

    return adjusted_speed1, adjusted_speed2

df[['AdjTime1','AdjTime2']] = df.apply(adj_speed,axis=1)

【问题讨论】:

  • 这里不需要申请;简单获胜:df['AdjTime1'] = df.Time*1.5 然后为第二行再写一行。也许通过许多调整后的值,您可以使其更具功能性,但实际上不需要 2 行进行简单的乘法运算。
  • 感谢您指出可能的重复,Sheldore,但我无法与我使用 .apply 和函数的示例相提并论。我还尝试通过分离两个新列来使用打包,但随后出现“太多值无法解包”错误。任何额外的帮助将不胜感激。谢谢!
  • 谢谢,ALollz。我应该澄清一下。我上面的例子被大大简化了。在我的实际版本中,我尝试创建大约 10 个新列,这些列都依赖于有些相似的计算,这就是为什么我想使用单个函数来创建它们。

标签: python pandas dataframe apply


【解决方案1】:

只需执行类似的操作(假设您有一个列表值要乘以 Time):

l=[1.5,2.0]
for e,i in enumerate(l):
    df['AdjTime'+str(e+1)]=df.Time*i
print(df)

  Runner  Time  AdjTime1  AdjTime2
0   Wade    80     120.0     160.0
1  Brian    75     112.5     150.0
2  Jason    98     147.0     196.0

【讨论】:

  • 谢谢,Anky。这对于计算不会因列而异的情况是有意义的。有没有办法在更复杂的例子中使用 .apply ?我的实际示例比上面的示例更复杂(例如,添加了 10 个源自不同计算的新列,而不仅仅是具有不同常数的相同计算)。我应该可以使用 .apply 来解决这个问题,但由于某种原因,我遇到了上面的关键错误问题。感谢您对此错误的任何见解。谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 2022-08-13
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
相关资源
最近更新 更多