【问题标题】:Concatenate rows in python dataframe连接python数据框中的行
【发布时间】:2018-02-01 12:37:42
【问题描述】:

这个问题可能非常基础,但我想在 pandas DataFrame 中连接三列。
我想将 col1、col2 和 col3 连接到 col4 中。我知道在 R 中这可以很容易地使用粘贴功能完成。

df = pd.DataFrame({'col1': [2012, 2013, 2014], 'col2': 'q', 'col3': range(3)})

编辑:代码清晰 - 我想自动生成 col4:

x=pd.DataFrame()
x['col1'] = [2012,2013,2013]
x['col2'] = ['q', 'q', 'q']
x['col3'] = [1,2,3]
x['col4'] = ['2012q1', '2013q2', '2014q4']

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    在转换为字符串后使用pd.DataFrame.sumaxis=1
    我使用pd.DataFrame.assign 来创建包含新列的副本

    df.assign(col4=df[['col1', 'col2', 'col3']].astype(str).sum(1))
    
       col1 col2  col3    col4
    0  2012    q     1  2012q1
    1  2013    q     2  2013q2
    2  2014    q     3  2014q3
    

    或者您可以就地添加一列

    df['col4'] = df[['col1', 'col2', 'col3']].astype(str).sum(1)
    df
    
       col1 col2  col3    col4
    0  2012    q     1  2012q1
    1  2013    q     2  2013q2
    2  2014    q     3  2014q3
    

    如果df只有三列,可以将代码缩减为

    df.assign(col4=df.astype(str).sum(1))
    

    如果df 的列超过三列,但您要连接的三列是前三列

    df.assign(col4=df.iloc[:, :3].astype(str).sum(1))
    

    【讨论】:

    • 字符串总和:)
    • 此解决方案适用于提供的代码,但在我的实际数据集上收到“错误数量的维度”错误
    • 这意味着您歪曲了您的数据。另外,我不知道你的错误是什么意思。您应该发布整个错误以提供更多上下文。
    【解决方案2】:

    要连接所有列,写df.apply(..., axis=1) 可能更方便,如下所示:

    df['col4'] = df.apply(lambda x: "".join(x.astype(str)),axis=1)
    df
    
    #   col1 col2  col3    col4
    #0  2012    q     1  2012q1
    #1  2013    q     2  2013q2
    #2  2014    q     3  2014q3
    

    特别是如果您有很多列并且不想将它们全部写出来(按照凯尔的回答所要求的)。

    【讨论】:

      【解决方案3】:
      df['col4'] = df.col1.astype(str) + df.col2 + df.col3.astype(str)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-20
        • 1970-01-01
        • 1970-01-01
        • 2017-12-30
        • 2020-02-01
        • 1970-01-01
        • 2021-07-24
        相关资源
        最近更新 更多