【问题标题】:Merge pandas DataFrame with MultiIndex将 Pandas DataFrame 与 MultiIndex 合并
【发布时间】:2016-04-01 12:57:48
【问题描述】:

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

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

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

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

我也尝试像这样合并帧:

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

我在这里做错了什么?

编辑:

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

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

【问题讨论】:

  • 您可以添加数据帧的样本吗?

标签: python pandas


【解决方案1】:

你可以试试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

【讨论】:

    猜你喜欢
    • 2020-06-15
    • 2012-11-18
    • 2019-11-10
    • 2023-03-11
    • 2020-11-30
    • 2018-07-22
    • 2019-05-20
    • 2017-08-25
    • 2016-11-06
    相关资源
    最近更新 更多