【问题标题】:Pandas: Generate multiple columns from a column熊猫:从一列生成多列
【发布时间】:2014-11-27 08:55:11
【问题描述】:

假设我有一个这样的数据框:

    df =
        X
    0  17
    1  120
    2  -290

现在,如果我想从X 生成三个新列,即X+12X-12X+100。最终的 df 将有 4 列:XX+12X-12X+100

我如何以干净的方式做到这一点? .apply 仅将一列转换为另一列。如何使用此功能将一列转换为多列?有没有办法做到这一点?

我正在寻找 Pandas 的方法,最好使用 .apply 或任何其他合适的函数。

编辑:忘记添加更多信息。我有一个函数,它接受这个值并从这个值生成一个值向量。我应该可以将它与类似的东西一起使用:

df[['X1','X2','X3']] = df.X.apply(f)

f 在哪里:

    def f(x):
      return x+12, x-12, x+100

我希望能够以这种方式生成列。这可能吗?

【问题讨论】:

    标签: python-2.7 pandas multiple-columns


    【解决方案1】:

    Afaik,您无法通过 df[['X1','X2','X3']] = .. 处理尚不存在的列。 但以下方法可行:

    def f(x):
      return x.add(12), x.sub(12), x.add(100)
    df['X+12'], df['X-12'], df['X+100'] = f(df)
    

    【讨论】:

      【解决方案2】:

      就像多个语句一样:

      In [31]:
      
      df['X+12'], df['X-12'], df['X+100'] = df+12, df-12, df+100
      df
      Out[31]:
           X  X+12  X-12  X+100
      0   17    29     5    117
      1  120   132   108    220
      2 -290  -278  -302   -190
      

      编辑

      我认为由于返回值的形状和预期的返回类型,您想要做的事情不会起作用。另一种方法是应用 lambda 并连接结果:

      In [66]:
      
      pd.concat([df,df.X.apply(lambda s: pd.Series({'X+12':s+12, 'X-12':s-12, 'X+100':s+100}))], axis=1)
      
      Out[66]:
           X  X+100  X+12  X-12
      0   17    117    29     5
      1  120    220   132   108
      2 -290   -190  -278  -302
      

      @der_die_das_jojo 也是一个不错的答案

      【讨论】:

      • 我刚刚编辑了我的问题以反映我正在寻找的方式。
      • 我刚刚遇到了这个 SO 问题:stackoverflow.com/questions/16236684/… 我认为这足以满足我的要求。我必须将 f 的返回类型更改为 dict。
      • @prashu 我编辑的答案(第二个)答案是基于那个问题,关键是它不是自动工作的,你必须强制返回类型,然后合并/合并
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      • 2023-03-10
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 2015-01-14
      • 1970-01-01
      相关资源
      最近更新 更多