【问题标题】:How to add two dataframes together based on a column using Pandas?如何使用 Pandas 基于列将两个数据框添加在一起?
【发布时间】:2019-05-02 12:41:19
【问题描述】:

我有两个数据框,我想在另一个中总结。

df1 =

authorId,quest1, quest2, quest3, ...
1, xxx, xxx, xxx, ...
2, xxx, xxx, xxx, ...
3, xxx, xxx, xxx, ...
...

df2 =

authorId,answer1, answer2, answer3, ...
1, yyy, yyy, yyy, ...
2, yyy, yyy, yyy, ...
3, yyy, yyy, yyy, ...
...

我想拥有

df3 = 

authorId,quest1, quest2, quest3, answer1, answer2, answer3, 
1, xxx, xxx, xxx, yyy, yyy, yyy, ...
2, xxx, xxx, xxx, yyy, yyy, yyy, ...
3, xxx, xxx, xxx, yyy, yyy, yyy, ...
...

我已经尝试合并或加入(在内部、左侧、右侧、外部),但它没有按预期工作。

df3 = df1.merge(df2, on='authorId', how='inner')

当我尝试加入时出现错误:

您正在尝试合并 object 和 int64 列。如果你想 继续你应该使用 pd.concat

【问题讨论】:

  • pd.concat([df1.set_index('authorId'),df2.set_index('authorId'),axis=1]) 试试这个
  • 它不起作用,我得到了 SyntaxError: invalid syntax

标签: python pandas


【解决方案1】:

您可以使用 @anky_91 建议使用 concat 或将 authorID 列转换为 int。

df1['authorId'] = df1['authorId'].astype(int)
df2['authorId'] = df2['authorId'].astype(int)
df3 = df1.merge(df2, on='authorId', how='inner')

您可以检查数据框 dtypes 以查看 authorID 列在两个 DF 中是否为相同类型。

df1.dtypes
df2.dtypes

【讨论】:

  • 对此的快速补充:通常,应为 float64 或 int 类型的 ID 列会因为一个异常值或拼写错误(如“112A”或 nan)而变为对象类型。如果.astype(int) 也引发错误,您可能必须更改这些值或过滤您的数据框。
猜你喜欢
  • 2018-01-13
  • 2022-12-01
  • 2021-04-09
  • 1970-01-01
  • 2019-12-16
  • 1970-01-01
  • 1970-01-01
  • 2018-04-06
  • 2017-04-04
相关资源
最近更新 更多