【问题标题】:Cleanest way to perform pandas join involving an index and also columns执行涉及索引和列的熊猫连接的最简洁方法
【发布时间】:2014-11-21 22:54:03
【问题描述】:

假设我想通过连接一个未命名的索引和一个列(这里是“标识符”)来合并(连接?)两个 pandas 表。有没有一种干净的方法可以做到这一点?

                               tvType         identifier 
2014-04-08 12:05:00  TMM_ISPREAD  ISIN: US92344GAS57 
2014-04-08 12:10:00  TMM_ISPREAD  ISIN: US92344GAS57 
2014-04-08 12:15:00  TMM_ISPREAD  ISIN: US92344GAS57 
2014-04-08 12:20:00  TMM_ISPREAD  ISIN: US92344GAS57 
2014-04-08 12:20:00  OTHER        ISIN: US92344GAS75 
                                   tv         identifier 
2014-04-08 12:05:00  131.957086  ISIN:US92344GAS57 
2014-04-08 12:10:00  131.932117  ISIN:US92344GAS57 
2014-04-08 12:15:00  131.945260  ISIN:US92344GAS57 
2014-04-08 12:20:00  131.888946  ISIN:US92344GAS57 
2014-04-08 12:20:00  131.920969  ISIN:US92344GAS75

说清楚,我想要的是

                               tv         identifier       tvType
2014-04-08 12:05:00  131.957086  ISIN:US92344GAS57  TMM_ISPREAD
2014-04-08 12:10:00  131.932117  ISIN:US92344GAS57  TMM_ISPREAD
2014-04-08 12:15:00  131.945260  ISIN:US92344GAS57  TMM_ISPREAD
2014-04-08 12:20:00  131.888946  ISIN:US92344GAS57  TMM_ISPREAD
2014-04-08 12:20:00  131.920969  ISIN:US92344GAS75  OTHER

而我看似繁琐的方式是

dfTv['time_index']     = dfTv.index
dfTvType['time_index'] = dfTvType.index
df = pd.merge( dfTv, dfTvType, on = ['identifier','time_index'] )
df = df.set_index(['time_index'])

(命名索引 - 不是我真正想要的副作用)

【问题讨论】:

  • 一个糟糕的剪切和粘贴!

标签: python join pandas concat


【解决方案1】:

也只需提供left_indexright_index

In [96]:

print df1
                          tvType         identifier
2014-04-08 12:05:00  TMM_ISPREAD  ISIN:US92344GAS57
2014-04-08 12:10:00  TMM_ISPREAD  ISIN:US92344GAS57
2014-04-08 12:15:00  TMM_ISPREAD  ISIN:US92344GAS57
2014-04-08 12:20:00  TMM_ISPREAD  ISIN:US92344GAS57
2014-04-08 12:25:00        OTHER  ISIN:US92344GAS75
In [97]:

print df2
                             tv         identifier
2014-04-08 12:05:00  131.957086  ISIN:US92344GAS57
2014-04-08 12:10:00  131.932117  ISIN:US92344GAS57
2014-04-08 12:15:00  131.945260  ISIN:US92344GAS57
2014-04-08 12:20:00  131.888946  ISIN:US92344GAS57
2014-04-08 12:25:00  131.920969  ISIN:US92344GAS75

In [98]:

print pd.merge(df2, df1, on = ['identifier'], left_index=True, right_index=True)
                             tv         identifier       tvType
2014-04-08 12:05:00  131.957086  ISIN:US92344GAS57  TMM_ISPREAD
2014-04-08 12:10:00  131.932117  ISIN:US92344GAS57  TMM_ISPREAD
2014-04-08 12:15:00  131.945260  ISIN:US92344GAS57  TMM_ISPREAD
2014-04-08 12:20:00  131.888946  ISIN:US92344GAS57  TMM_ISPREAD
2014-04-08 12:25:00  131.920969  ISIN:US92344GAS75        OTHER

【讨论】:

    猜你喜欢
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多