Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.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 按X、Y分组,并选择X1和X2(具有不同频率)的最后一周_Python_Pandas - Fatal编程技术网

Python 按X、Y分组,并选择X1和X2(具有不同频率)的最后一周

Python 按X、Y分组,并选择X1和X2(具有不同频率)的最后一周,python,pandas,Python,Pandas,我有一个看起来像这样的数据帧(通常): 源A的频率约为2/天 源B的频率更高 我想按来源和id分组;然后为每个选择最后一周的数据 我尝试了一个快速跟踪(20),但为了我的目的(减去上周每位患者的直方图(pmf)),我想更精确一些 如何获取索引的最后一周?假设您有这样一个数据帧: In [50]: s="""time source id ...: 4-25-2014 A 1 ...: 5-4-2014 A 1 ...:

我有一个看起来像这样的数据帧(通常):

  • 源A的频率约为2/天
  • 源B的频率更高
我想按来源和id分组;然后为每个选择最后一周的数据

我尝试了一个快速跟踪(20),但为了我的目的(减去上周每位患者的直方图(pmf)),我想更精确一些


如何获取索引的最后一周?

假设您有这样一个数据帧:

In [50]: s="""time      source   id
    ...: 4-25-2014    A       1
    ...: 5-4-2014    A       1
    ...: 5-5-2014    A       1
    ...: 4-2-2013   B       12
    ...: 4-6-2013   B       12
    ...: 4-11-2013   B       12
    ...: 4-12-2013   B       12
    ...: 4-12-2013   B       12"""

In [51]: df = pd.read_csv(StringIO(s), sep="\s+")

In [52]: df['time'] = pd.to_datetime(df['time'])

In [53]: df
Out[53]: 
        time source  id
0 2014-04-25      A   1
1 2014-05-04      A   1
2 2014-05-05      A   1
3 2013-04-02      B  12
4 2013-04-06      B  12
5 2013-04-11      B  12
6 2013-04-12      B  12
7 2013-04-12      B  12
然后,可以在分组对象的应用调用中选择所需的行:

In [57]: g = df.groupby(['source', 'id'])

In [58]: g.apply(lambda x : x[x['time'] > (x['time'].iloc[-1] - dt.timedelta(7))])
Out[58]: 
                  time source  id
source id                        
A      1  1 2014-05-04      A   1
          2 2014-05-05      A   1
B      12 4 2013-04-06      B  12
          5 2013-04-11      B  12
          6 2013-04-12      B  12
          7 2013-04-12      B  12

“上周”是什么意思?仅仅是该组中的最后一个日期?不,我指的是从最后一个日期(对于一个组)开始的行的范围,它跨越一周的时间(索引)。(抱歉搞混了)不过,我还没有检查过;看起来不错。谢谢我正在运行pandas.10(不支持iloc),升级到.14,并获得pandas.algos.sure错误(float nan to int…)我必须卸载pandas,可能会尝试安装更低版本。。。尽管这看起来并不乐观。有什么建议吗?如果您无法升级或无法解决0.14的问题,您可以尝试使用
ix
而不是
iloc
In [57]: g = df.groupby(['source', 'id'])

In [58]: g.apply(lambda x : x[x['time'] > (x['time'].iloc[-1] - dt.timedelta(7))])
Out[58]: 
                  time source  id
source id                        
A      1  1 2014-05-04      A   1
          2 2014-05-05      A   1
B      12 4 2013-04-06      B  12
          5 2013-04-11      B  12
          6 2013-04-12      B  12
          7 2013-04-12      B  12