【问题标题】:Pandas: how to apply function to only part of a dataframe and append result back to dataframe?Pandas:如何将函数仅应用于数据帧的一部分并将结果附加到数据帧?
【发布时间】:2014-03-05 19:41:32
【问题描述】:

我创建了以下数据框

User    Week1  Week2

UserA   5      7
UserB   7      0
UserC   8     20

来自这个原始列表

List = [['UserA',5,7],['UserB',7,0],['UserC',8,20]]

我想为每个用户每周计算一个公式,并为这些公式创建第三列和第四列的结果。

问题是当我尝试执行以下操作时,我得到一个“TypeError:无法将...转换为数字”:

    return DF.apply(lambda x: (x - x.mean()) / x.std())

以下方法虽然有效:

 Python_Sublists = [subli[1:3] for subli in List]
 >>[[5,7],[7,0],[8,20]]

DF = pd.DataFrame(Python_Sublists,columns=['Week1','Week2'])

return DF.apply(lambda x: (x - x.mean()) / x.std())

然后我可以弄清楚如何将这些列表附加回原始列表(尽管我不知道如何再次从数据框转到列表来执行此操作)。是否有更直接的方法仅将函数应用于数值变量?另外,您如何将 pandas 数据框改回其原始列表形式?

【问题讨论】:

    标签: python list pandas dataframe stat


    【解决方案1】:

    df[['week1','week2']].apply(lambda x: (x - x.mean()) / x.std()) 不应该工作吗?您的第一列不是数字数据。我确信这是导致问题的原因。

    如果需要,要将新数据“附加”到原始数据帧,可以很简单:df[['c3','c4']]=df[['week1','week2']].apply(lambda x: (x - x.mean()) / x.std())。新列将命名为'c3''c4'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 2020-05-28
      • 1970-01-01
      • 2020-09-13
      相关资源
      最近更新 更多