【问题标题】:Combine two numeric dataframe columns into one column of tuple [duplicate]将两个数字数据框列组合成一列元组[重复]
【发布时间】:2018-08-12 13:21:24
【问题描述】:

我想创建一个将 2 列放在一起的新列。我浏览了互联网,但一无所获。我该怎么办:

例如:

A B
50.631456 5.57871    

C
(50.631456, 5.57871)

【问题讨论】:

  • 所以你想像在 C 中一样将 2 列放入 1 中?请参阅:stackoverflow.com/questions/12555323/… 在 Sereis 中放入您的数据
  • 您想将两个(数字?)列组合成一个包含 Python 元组的列,是吗? (不是字符串)
  • 顺便说一句,如果你想在你的数据框中有(lat,long)元组对象,这不是一个好主意,任何处理它们的函数都必须对它们进行特殊处理。最好在编写 csv/export/pickle 数据帧时转换为元组。
  • @ThibaultMambour,以下解决方案之一能否解决您的问题?如果是这样,请考虑接受答案(左侧的绿色勾号),以便其他用户知道。

标签: python pandas dataframe tuples


【解决方案1】:

list + zip 是一种有效的方式:

df['C'] = list(zip(df.A, df.B))

#            A        B                     C
# 0  50.631456  5.57871  (50.631456, 5.57871)

性能

正如预期的那样,df.apply 方法对于大型数据帧来说是循环且效率低下的,尤其是与 lambda 结合使用时。

df = pd.concat([df]*10000)

%timeit list(zip(df.A, df.B))                  # 3.14ms
%timeit df.apply(tuple, axis=1)                # 378ms
%timeit df.apply(lambda x: (x.A,x.B), axis=1)  # 577ms

【讨论】:

    【解决方案2】:

    结帐DataFrame.apply

    df = pd.DataFrame(np.random.randint(0, 10, (6, 2)), columns=['a', 'b'])
    
    df['c'] = df.apply(tuple, axis=1)
    df
    

    返回

       a  b       c
    0  8  1  (8, 1)
    1  3  3  (3, 3)
    2  2  8  (2, 8)
    3  6  2  (6, 2)
    4  2  2  (2, 2)
    5  8  5  (8, 5)
    

    【讨论】:

      【解决方案3】:

      你可以使用申请。

      df = pd.DataFrame({'A': {0: 50.631456}, 'B': {0: 5.57871}})
      
      df
      Out[162]: 
                 A        B
      0  50.631456  5.57871
      
      df['C'] = df.apply(lambda x: (x.A,x.B), axis=1)
      
      df
      Out[155]: 
                 A        B                     C
      0  50.631456  5.57871  (50.631456, 5.57871)
      

      【讨论】:

        猜你喜欢
        • 2015-08-26
        • 2011-01-24
        • 1970-01-01
        • 2018-10-05
        • 1970-01-01
        • 2015-10-30
        • 2016-11-01
        • 2021-07-27
        • 1970-01-01
        相关资源
        最近更新 更多