【问题标题】:Get the first week in a row of consecutive weeks in DataFrame获取DataFrame中连续一周的第一周
【发布时间】:2019-04-05 23:35:01
【问题描述】:

我一直在努力尝试在连续几周的第一周获得 DataFrame 中的特定 ID,如下所示:

week     id
 1        1
 2        1
 3        1
 6        1
 7        1
 8        1
 3        2
 4        2

因此,对于 id 1,有连续三周 (1-3),然后是连续三周 (6-8),对于 id 2,有 2 (3-4)。所以,我想要的输出是:

week     id   first_week
 1        1       1
 2        1       1
 3        1       1
 6        1       6
 7        1       6
 8        1       6
 3        2       3
 4        2       3

我可以用这个来计算连续的周数:

df.groupby(['id',df['week'].diff(-1).ne(-1).shift().bfill().cumsum()]).transform('count')

但我无法找到第一周(我想构建一个新的 id 来添加连续周的连续性从哪一周开始)

【问题讨论】:

    标签: python pandas group-by


    【解决方案1】:

    groupby 获取 diff 和条件赋值,然后只需 ffill nan

    df.loc[df.groupby('id').week.diff().ne(1),'fw']=df.week
    df.fw=df.fw.ffill()
    df
    Out[158]: 
       week  id   fw
    0     1   1  1.0
    1     2   1  1.0
    2     3   1  1.0
    3     6   1  6.0
    4     7   1  6.0
    5     8   1  6.0
    6     3   2  3.0
    7     4   2  3.0
    

    【讨论】:

    • 完美!正是我想要的。你知道有什么资源可以让我更多地了解groupby 的更高级用法吗?我只习惯按一列或多列分组,然后应用聚合函数,我很想开始了解其他用途
    • @JuanC hi,pandas.pydata.org/pandas-docs/stable/user_guide/cookbook.html,那些'advance groupby'的用法是和其他的结合起来的。并希望该链接可以提供帮助。
    猜你喜欢
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 2017-12-29
    • 1970-01-01
    • 2021-07-21
    • 2010-12-26
    • 2020-06-04
    相关资源
    最近更新 更多