python - 将 pandas DataFrame 与 MultiIndex 合并

标签 python pandas

我有两个具有多级索引的 pandas 数据框(日期是第一个维度,一天中的小时是第二个维度)。

我想将数据帧first中的一列添加到数据帧second。如果我只是尝试:

second["new_col"] = first["new_col"]

尽管两个数据帧具有完全相同的索引,但我在 second["new_col"] 中仅获得每行的 NaN 值。

我还尝试像这样合并框架:

second = pd.merge(second, first.loc[:,"new_col"], how = "inner")

我在这里做错了什么?

编辑:

我自己找到了解决方案:似乎索引的数据类型不一样。我将每个帧的索引列类型转换为 strint,这解决了问题。

如何提前检查索引级别的数据类型,以避免此类错误?

最佳答案

您可以尝试df.index.levels:

import pandas as pd
import io

temp=u"""Date;Time;ID
8/14/2015;3:00;aaa123
8/7/2015;4:00;aaa123
7/15/2015;2:00;aaa123
8/22/2015;7:00;aaa123
8/3/2015;1:00;bbb222
8/8/2015;5:00;bbb222
8/10/2015;7:00;bbb222"""

df1 = pd.read_csv(io.StringIO(temp), parse_dates=[0],sep=";")

df1 = df1.sort_values(["Date", "Time"])
df1= df1.set_index(["Date", "Time"])

print df1
                     ID
Date       Time        
2015-07-15 2:00  aaa123
2015-08-03 1:00  bbb222
2015-08-07 4:00  aaa123
2015-08-08 5:00  bbb222
2015-08-10 7:00  bbb222
2015-08-14 3:00  aaa123
2015-08-22 7:00  aaa123
print df1.index.levels[0]
DatetimeIndex(['2015-07-15', '2015-08-03', '2015-08-07', '2015-08-08',
               '2015-08-10', '2015-08-14', '2015-08-22'],
              dtype='datetime64[ns]', name=u'Date', freq=None)

print df1.index.levels[1]
Index([u'1:00', u'2:00', u'3:00', u'4:00', u'5:00', u'7:00'], dtype='object', name=u'Time')

print df1.index.levels[0].dtype
datetime64[ns]
print df1.index.levels[1].dtype
object

关于python - 将 pandas DataFrame 与 MultiIndex 合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34480600/

相关文章:

python - 在 df 中查找值

python - 从没有标题的 CSV 中在 Pandas 中绘制图表

python - DataFrame 列中的混合类型元素

python - 如何获得连续元素频率的排名?

python - 使用boto3修改基于标签的Cloud-formation堆栈的终止保护

python - 将多个文件连接到 pandas 数据框中

python - 更新单例中的属性(python)

当到达大写单词时,Python 将列表拆分为多个较短的列表

来自网站的 Python 抓取表?

python - 使用 Python 将 CSV 解析为 API 的数据库?