大Pandas按X,Y分组,选择X1和X2的最后一周(有差异频率)

2024-05-19 17:08:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个数据帧(通常):

time      source   id
5-4-2014    A       1
5-4-2014    A       1
5-5-2014    A       1
...
4-12-2013   B       12
4-12-2013   B       12
4-12-2013   B       12
...
  • 源A频率约为2/天
  • 源B频率更高。你知道吗

我想按来源和id进行分组;然后为每个人选择最后一周的数据。你知道吗

我尝试了一个快速跟踪(20),但为了我的目的(减去直方图(pmf))上周每个病人,我想更准确。你知道吗

如何获取索引的最后一周?你知道吗


Tags: 数据目的idsourcetime来源直方图频率
1条回答
网友
1楼 · 发布于 2024-05-19 17:08:02

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

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

然后,可以在分组对象的apply调用中选择所需的行:

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

相关问题 更多 >