【问题标题】:Inserting a row from dataframe to another dataframe where columns overlap将数据帧中的一行插入到列重叠的另一个数据帧中
【发布时间】:2020-12-10 17:35:14
【问题描述】:
df1 = pd.DataFrame(columns = ['name','address','age','hobby'], index = ['num1','num2','num3'])
df2 = pd.DataFrame(columns = ['name','age'])
df2['name'] = ['David']
df2['age'] = [20]

# output should yield the same result as below
df1.iloc[0,:] = ['David', np.nan, 20, np.nan]

我想将 df2 的第一行插入 df1 的第一行,以便不重叠的列具有 NaN 值。我可以在不使用 for 循环或单独分配值的情况下执行此操作吗?我希望以最少的计算时间整体分配它们。谢谢。

【问题讨论】:

  • 您预期的输出数据框是什么样的?
  • @ScottBoston 更新谢谢

标签: python pandas dataframe


【解决方案1】:

IIUC,你可以试试这样的:

df2.rename({0:'num1'}).combine_first(df1)

输出:

      address   age  hobby   name
num1      NaN  20.0    NaN  David
num2      NaN   NaN    NaN    NaN
num3      NaN   NaN    NaN    NaN

在末尾添加重新索引。

df2.rename({0:'num1'}).combine_first(df1).reindex(df1.columns, axis=1)

输出:

       name  address   age  hobby
num1  David      NaN  20.0    NaN
num2    NaN      NaN   NaN    NaN
num3    NaN      NaN   NaN    NaN

【讨论】:

  • 这会重新排列列。有没有办法防止这种情况?而不是写另一行?
  • @JHY 最后使用 reindex(df1.columns)。查看更新。
  • 这很有帮助:-)
【解决方案2】:

你也可以使用iloc来定义它:

df1.iloc[0,[0,2]] = df2.values

输出:

       name address  age hobby
num1  David     NaN   20   NaN
num2    NaN     NaN  NaN   NaN
num3    NaN     NaN  NaN   NaN

【讨论】:

  • 在这种情况下,我必须手动指定列,如果我在循环中执行此操作可能会出现问题
  • 如果要多列,可以指定范围
猜你喜欢
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
相关资源
最近更新 更多