【问题标题】:Pandas: How to append new columns to all rows in data frame熊猫:如何将新列附加到数据框中的所有行
【发布时间】:2018-02-12 21:21:54
【问题描述】:

我有两个数据框:

df1 = pd.DataFrame(data={
  'ColumnA': ['A1','A2','A3'],
  'ColumnB' : [ 'B1','B2','B3'],
  'ColumnC' : [ 'C1','C2','C3']
})


df2 = pd.DataFrame(data={
  'id': ['1'],
  'Value1' : [ 'v1'],
  'Value2' : [ 'v2']
})



  ColumnB ColumnC columnA id
0      B1      C1      A1  1
1      B2      C2      A2  1
2      B3      C3      A3  1


  Value1 Value2 id
0     v1     v2  1

并希望获得 df3,其中 df1 上的所有行都将包含来自 df2 的列。

  ColumnB ColumnC columnA id Value1 Value2
0      B1      C1      A1  1     v1     v2
1      B2      C2      A2  1     v1     v2
2      B3      C3      A3  1     v1     v2

目前我是这样做的:

id = df2['id'][0]
df1['id'] = id

df3 = df1.merge(df2,left_on='id',right_on='id',how='left')

有什么更好的方法?

【问题讨论】:

    标签: python pandas dataframe merge


    【解决方案1】:

    另一种方式

    In [1728]: df1.assign(k=0).merge(df2.assign(k=0), on='k').drop('k', 1)
    Out[1728]:
      ColumnA ColumnB ColumnC Value1 Value2 id
    0      A1      B1      C1     v1     v2  1
    1      A2      B2      C2     v1     v2  1
    2      A3      B3      C3     v1     v2  1
    

    如果您的数据中没有NaN

    In [1734]: df1.join(df2).ffill()
    Out[1734]:
      ColumnA ColumnB ColumnC Value1 Value2 id
    0      A1      B1      C1     v1     v2  1
    1      A2      B2      C2     v1     v2  1
    2      A3      B3      C3     v1     v2  1
    

    【讨论】:

      【解决方案2】:

      使用Seriesassigndf2 的选定第一行创建:

      df3 = df1.assign(**df2.iloc[0])
      print (df3)
        ColumnA ColumnB ColumnC Value1 Value2 id
      0      A1      B1      C1     v1     v2  1
      1      A2      B2      C2     v1     v2  1
      2      A3      B3      C3     v1     v2  1
      

      【讨论】:

      • 这一定是python和pandas语法的优雅用法之一。
      【解决方案3】:

      pd.concatffill() 一起使用

      pd.concat([df1,df2],axis=1).ffill()
      Out[388]: 
        ColumnA ColumnB ColumnC Value1 Value2 id
      0      A1      B1      C1     v1     v2  1
      1      A2      B2      C2     v1     v2  1
      2      A3      B3      C3     v1     v2  1
      

      【讨论】:

        猜你喜欢
        • 2018-09-29
        • 2014-01-03
        • 1970-01-01
        • 1970-01-01
        • 2019-04-01
        • 2023-02-01
        • 2019-10-22
        • 2021-12-07
        • 2019-01-14
        相关资源
        最近更新 更多