python - 执行涉及索引和列的 Pandas 连接的最干净的方法

标签 python join pandas concatenation

假设我想通过加入一个未命名的索引和一个列(这里是“标识符”)来合并(concat?)两个 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'])

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

最佳答案

也只需提供 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

关于python - 执行涉及索引和列的 Pandas 连接的最干净的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26067850/

相关文章:

python - Pandas 将日期列转换为整数并将整列显示为整数值

python - 嵌套函数中缺少参数(装饰器)

python - Matplotlib 文本对齐

python - Airflow Python 运算符传递参数

python - 为什么我在尝试使用 pymysql 运行 "You have an error in your SQL syntax;"后收到此 "Status"错误?

MySQL 查询存储在一个表中以更新另一表中的值

php - Sql 在 codeigniter 中将 AND 与 OR 组合

sql-server - 显示来自 Join 查询的不同数据

python - pandas:输出两列字符串列表之间的差异

python - 有没有更快的方法来写入或读取大约 100 万行的 pandas 数据帧