【问题标题】:Pandas Merge multiple dataframes on index and columnPandas 在索引和列上合并多个数据框
【发布时间】:2019-12-09 10:10:58
【问题描述】:

我正在尝试使用主要数据帧中的日期时间索引和 id 以及其他数据帧中的日期时间和 id 列将多个数据帧合并到一个主要数据帧

主要数据框

DateTime | id | data
(Df.Index)
---------|----|------
2017-9-8 |  1 |  a
2017-9-9 |  2 |  b

df1

id | data1 | data2 | DateTime
---|-------|-------|---------
1  |  a    |   c   | 2017-9-8
2  |  b    |   d   | 2017-9-9
5  |  a    |   e   | 2017-9-20

df2

id | data3 | data4 | DateTime
---|-------|-------|---------
1  |  d    |   c   | 2017-9-8
2  |  e    |   a   | 2017-9-9
4  |  f    |   h   | 2017-9-20

主数据框和其他数据框位于不同的字典中。我想从每个字典中读取并在满足加入条件(日期时间,id)时合并

for sleep in dictOfSleep#MainDataFrame:
    for sensorDevice in dictOfSensor#OtherDataFrames:
        try:
  dictOfSleep[sleep]=pd.merge(dictOfSleep[sleep],dictOfSensor[sensorDevice], how='outer',on=['DateTime','id'])

        except:
            print('Join could not be done')

期望的输出:

DateTime | id | data | data1 | data2 | data3 | data4
(Df.Index)
---------|----|------|-------|-------|-------|-------|
2017-9-8 |  1 |  a   |  a    |   c   |   d   |   c   |
2017-9-9 |  2 |  b   |  b    |   d   |   e   |   a   |

【问题讨论】:

标签: python pandas merge


【解决方案1】:

我不确定您的字典是如何设置的,因此您很可能需要对其进行修改,但我会尝试以下方法:

for sensorDevice in dictOfSensor:
    df = dictOfSensor[sensorDevice]
    # set df index to match the main_df index
    df = df.set_index(['DateTime'])
    # try join (not merge) when combining on index
    main_df = main_df.join(df, how='outer')

或者,如果id 列非常重要,您可以尝试先重置您的 main_df 索引然后合并。

main_df = main_df.reset_index()
for sensorDevice in dictOfSensor:
    df = dictOfSensor[sensorDevice]
    # try to merge on both columns
    main_df = main_df.merge(df, how='outer', on=['DateTime', 'id])

【讨论】:

  • 谢谢@eva-vw...我会试试这个解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 2014-08-09
  • 2021-03-08
相关资源
最近更新 更多