【问题标题】:Assign values to multiple columns in Pandas [duplicate]为 Pandas 中的多列赋值[重复]
【发布时间】:2016-03-08 13:53:09
【问题描述】:

我已经关注了简单的 DataFrame - df:

   0
0  1
1  2
2  3

一旦我尝试创建一个新列并为它们分配一些值,如下例所示:

df['col2', 'col3'] = [(2,3), (2,3), (2,3)]

我得到了以下结构

   0 (col2, col3)
0  1    (2, 3)
1  2    (2, 3)
2  3    (2, 3)

但是,我正在寻找一种方法:

   0 col2, col3
0  1    2,   3
1  2    2,   3
2  3    2,   3

【问题讨论】:

标签: python pandas python-2.7 dataframe series


【解决方案1】:

【讨论】:

    【解决方案2】:

    我在尝试将多个标量值应用于多个新列时遇到了这个问题,但找不到更好的方法。如果我遗漏了一些明显的东西,请告诉我,但df[['b','c']] = 0 不起作用。但这是简化的代码:

    # Create the "current" dataframe
    df = pd.DataFrame({'a':[1,2]})
    
    # List of columns I want to add
    col_list = ['b','c']
    
    # Quickly create key : scalar value dictionary
    scalar_dict = { c : 0 for c in col_list }
    
    # Create the dataframe for those columns - key here is setting the index = df.index
    df[col_list] = pd.DataFrame(scalar_dict, index = df.index)
    

    或者,似乎稍微快一点的是使用.assign()

    df = df.assign(**scalar_dict)
    

    【讨论】:

      【解决方案3】:

      有一种方便的解决方案可以通过元组列表将多个系列连接到数据帧。您可以从您的元组列表中构造一个数据框之前分配:

      df = pd.DataFrame({0: [1, 2, 3]})
      df[['col2', 'col3']] = pd.DataFrame([(2,3), (2,3), (2,3)])
      
      print(df)
      
         0  col2  col3
      0  1     2     3
      1  2     2     3
      2  3     2     3
      

      这很方便,例如,当您希望加入任意数量的系列时。

      【讨论】:

      • 迄今为止最好的解决方案!特别是当你有一个 numpy 数组时。
      【解决方案4】:

      看起来解决方案很简单:

      df['col2'], df['col3'] = zip(*[(2,3), (2,3), (2,3)])
      

      【讨论】:

      • 虽然这段代码可以回答这个问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它。从长远来看,纯代码的答案没有用处。
      • 如果您的问题很简单,解决方案也很简单。如果您想同时分配 100 列,则解决方案是无用的。
      • 如果您有分配 100 列的优化解决方案,请随时分享。
      • @SpanishBoy 有点令人沮丧,这么多年过去了,仍然没有方便的语法。你能做的最好的就是一个 for 循环:for colname, data in zip(['col2', 'col3'], zip(*[(2, 3), (2, 3), (2, 3)])): df[colname] = data
      • @shadowtalker,我认为有更好的方法来做到这一点..您可以将数据框分配给df[['col2', 'col3']],请参阅我的答案。
      猜你喜欢
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      • 2023-02-06
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 2021-03-30
      • 2018-05-07
      相关资源
      最近更新 更多