当前位置: 首页 > 知识库问答 >
问题:

Python:按日期索引和公共列值组合两个数据帧

凌善
2023-03-14

有两个日期框,一个是df1,另一个是df2,如下所示:

df1:

               a   b    id
2010-01-01     1   4    21
2010-01-01     2   5    22
2010-01-01     3   6    23
2010-01-01     4   7    24
2010-01-02     1   4    21
2010-01-02     2   5    22
2010-01-02     3   6    23
2010-01-02     4   7    24
2010-01-03     1   4    21
2010-01-03     2   5    22
2010-01-03     3   6    23
2010-01-03     4   7    24
...........................

DF2:

               c   d    id
2010-01-02     1   4    21
2010-01-02     2   5    22
2010-01-02     3   6    23
2010-01-02     4   7    24
2010-01-03     1   4    21
2010-01-03     2   5    22
2010-01-03     3   6    23
2010-01-03     4   7    24
...........................

我想通过公共索引(请注意,df1中的某些索引不在df2中)和id合并或联接两个数据帧,我希望联接的数据帧如下

               c   d    a   b   id
2010-01-02     1   4    1   4   21
2010-01-02     2   5    2   5   22
2010-01-02     3   6    3   6   23
2010-01-02     4   7    4   7   24
2010-01-03     1   4    1   4   21
2010-01-03     2   5    2   5   22
2010-01-03     3   6    3   6   23
2010-01-03     4   7    4    7  24

我使用了以下代码

 df = df1.join(df2, on = ['id'], how='inner')

但这并不奏效

共有1个答案

许淳
2023-03-14

IIUC:

In [388]: df2.set_index('id', append=True).join(df1.set_index('id', append=True)) \
             .reset_index(level='id')
Out[388]:
            id  c  d  a  b
2010-01-02  21  1  4  1  4
2010-01-02  22  2  5  2  5
2010-01-02  23  3  6  3  6
2010-01-02  24  4  7  4  7
2010-01-03  21  1  4  1  4
2010-01-03  22  2  5  2  5
2010-01-03  23  3  6  3  6
2010-01-03  24  4  7  4  7
 类似资料:
  • 在索引上合并是不好的做法吗?不可能吗?如果是,如何将索引转换为名为“index”的新列?

  • 问题内容: 我有以下数据框: 如何合并索引以获取: 我问,因为据我了解,即使用列进行匹配。实际上,这样做我得到: 在索引上合并是不好的做法吗?不可能吗 如果是这样,如何将索引移到称为“索引”的新列中? 问题答案: 使用,默认情况下是内部联接: 或,默认情况下为左连接: 或,默认情况下为外部联接: 样品 :

  • 问题内容: 我有两个数据框需要根据日期值是否适合其他两个日期之间进行合并。基本上,我需要在和之间执行外部联接。似乎合并和连接总是假定有一个公共列,在这种情况下,我没有。 问题答案: 创建日期时间的数据和格式: 创建键进行交叉连接: 筛选出在开始日期和结束日期之间不符合事件日期条件的记录: 加入原始日期范围表并放下关键列 输出:

  • 我有2个数据帧: 谢谢!

  • 我正在尝试通过ID和日期聚合数据帧。假设我有一个DataFrame: 我想通过ID和日期(频率=1W)聚合该值,并得到一个dataframe如下所示: 我理解它可以通过迭代ID并使用grouper聚合价格来实现。有没有更有效的方法不迭代IDS?多谢。

  • 问题内容: 我的GUI中有多个组合框,所有组合框都需要数据。此数据将随机更改,因此需要一种快速的方法来保持所有值同步。我遇到了DefaultComboBoxModel,它实际上非常合适。唯一的事情是,我需要组合框彼此独立- 意思是:如果我在一个上选择一个值,则所有其他框都不应更改。我做了一些研究,并阅读了标准的Java教程,但没有一个告诉我如何使用DefaultComboBoxModel来实现这一