【问题标题】:Pandas create a data frame based on two other 'sub' framesPandas 基于另外两个“子”帧创建数据帧
【发布时间】:2019-05-25 13:41:56
【问题描述】:

我有两个 Pandas 数据框。 df1 有列 ['a','b','c'],df2 有列 ['a','c','d']。现在,我创建了一个新的数据框 df3,其列 ['a', b','c','d']。

我想用来自 df1 和 df2 的所有输入来填充 df3。例如,如果我在 df1 中有 x 行,在 df2 中有 y 行,那么我将在 df3 中有 x+y 行。

哪个 Pandas 函数根据部分列填充新数据框?

【问题讨论】:

  • 谢谢!但是,当我合并时,我需要加入一些对吗?我想要的是一一添加所有行,并将值写入相应的列。

标签: python python-3.x pandas dataframe


【解决方案1】:

示例数据:

df1 = pd.DataFrame({'a':[1, 2, 3], 'b':[2, 3, 4], 'd':['h', 'j', 'k']})
df2 = pd.DataFrame({'a':[5, 6, 7], 'b':[1, 1, 1], 'c':[2, 2, 2]})

代码:

df1.append(df2)

输出:

   a  b    c    d
0  1  2  NaN    h
1  2  3  NaN    j
2  3  4  NaN    k
0  5  1  2.0  NaN
1  6  1  2.0  NaN
2  7  1  2.0  NaN

【讨论】:

  • 谢谢!如果在 df1 中也有“d”列怎么办。那它还能用吗?
  • 有没有办法保持第一个的列顺序并在最后添加附加的?我希望新的数据框有:a-b-d-c
  • @aslv95 我在append 中不知道这一点,但您可以在之后重新排序:df = df[['a', 'b', 'd', 'c']]
【解决方案2】:

使用dataframe的追加功能https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.append.html

anotherFrame = df1.append(df2, ignore_index=True)

另一种方法是合并 - https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html

df1.merge(df2, how='outer')

【讨论】:

    【解决方案3】:

    怎么样:

    df1 =  pd.DataFrame({"a": [1,2], "b": [3,4], "c": [5,6]})
    df2 =  pd.DataFrame({"a": [7,8], "c": [9,10], "d": [11,12]})
    df3 = df1.append(df2, sort=False)
    df3
       a    b   c     d
    0  1  3.0   5   NaN
    1  2  4.0   6   NaN
    0  7  NaN   9  11.0
    1  8  NaN  10  12.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-25
      • 2020-09-18
      • 2019-07-29
      • 2021-05-27
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多