Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用多索引和多列重新采样_Python 3.x_Pandas - Fatal编程技术网

Python 3.x 使用多索引和多列重新采样

Python 3.x 使用多索引和多列重新采样,python-3.x,pandas,Python 3.x,Pandas,我有一个具有以下结构的熊猫数据帧: ID date m_1 m_2 1 2016-01-03 10 3.4 2016-02-07 11 3.3 2016-02-07 10.4 2.8 2 2016-01-01 10.9 2.5 2016-02-04 12 2.3 2016-02-04 11 2.7 2016-02-

我有一个具有以下结构的熊猫数据帧:

ID    date           m_1   m_2 
 1    2016-01-03     10    3.4
      2016-02-07     11    3.3
      2016-02-07     10.4  2.8
 2    2016-01-01     10.9  2.5
      2016-02-04     12    2.3
      2016-02-04     11    2.7
      2016-02-04     12.1  2.1
ID
date
都是一个
多索引
。数据表示一些传感器(示例中为两个传感器)进行的一些测量。这些传感器有时每天会创建几个测量值(如示例所示)

我的问题是:

  • 我如何对其重新采样,使每个传感器每天有一行,但一列有
    平均值
    ,另一列有
    最大值
    ,另一列有
    最小值
    ,以此类推
  • 我如何“对齐”(也许这不是正确的词)两个时间序列,以便两者同时开始和结束(从
    2016-01-01
    2016-02-07
    ),使用NAs添加缺失的天数
您可以先与
dict
中的函数一起使用,然后通过以下方式进行聚合:

对于第二级中的
PeriodIndex
,请与以下内容一起使用:


令人惊叹的。谢谢你不认为现在的
日期应该是
期间而不是
时间戳吗?@nanounaue-不,没有理由。@nanounaue-你可以通过
打印(df.index.get\u level\u value('date'))来检查它。
如果我的问题不清楚,我道歉。我的意思是(在评论中)如果有一种简单的方法将
日期
索引转换为
期间
是的,这是可能的,您需要月还是日期间?
df = df.reset_index(level=0).groupby('ID').resample('D').agg({'m_1':'mean', 'm_2':'max'})
df = df.reindex(pd.MultiIndex.from_product(df.index.levels, names = df.index.names))

#alternative for adding missing start and end datetimes
#df = df.unstack().stack(dropna=False)
print (df.head())
               m_2   m_1
ID date                 
1  2016-01-01  NaN   NaN
   2016-01-02  NaN   NaN
   2016-01-03  3.4  10.0
   2016-01-04  NaN   NaN
   2016-01-05  NaN   NaN
df.index = df.index.set_levels(df.index.get_level_values('date').to_period('d'), level=1)

print (df.index.get_level_values('date'))

PeriodIndex(['2016-01-01', '2016-01-02', '2016-01-03', '2016-01-04',
             '2016-01-05', '2016-01-06', '2016-01-07', '2016-01-08',
             '2016-01-09', '2016-01-10', '2016-01-11', '2016-01-12',
             '2016-01-13', '2016-01-14', '2016-01-15', '2016-01-16',
             '2016-01-17', '2016-01-18', '2016-01-19', '2016-01-20',
             '2016-01-21', '2016-01-22', '2016-01-23', '2016-01-24',
             '2016-01-25', '2016-01-26', '2016-01-27', '2016-01-28',
             '2016-01-29', '2016-01-30', '2016-01-31', '2016-02-01',
             '2016-02-02', '2016-02-03', '2016-02-04', '2016-02-05',
             '2016-02-06', '2016-02-07', '2016-01-01', '2016-01-02',
             '2016-01-03', '2016-01-04', '2016-01-05', '2016-01-06',
             '2016-01-07', '2016-01-08', '2016-01-09', '2016-01-10',
             '2016-01-11', '2016-01-12', '2016-01-13', '2016-01-14',
             '2016-01-15', '2016-01-16', '2016-01-17', '2016-01-18',
             '2016-01-19', '2016-01-20', '2016-01-21', '2016-01-22',
             '2016-01-23', '2016-01-24', '2016-01-25', '2016-01-26',
             '2016-01-27', '2016-01-28', '2016-01-29', '2016-01-30',
             '2016-01-31', '2016-02-01', '2016-02-02', '2016-02-03',
             '2016-02-04', '2016-02-05', '2016-02-06', '2016-02-07'],
            dtype='period[D]', name='date', freq='D')