【问题标题】:How can I create a sequence of repeating numbers based on another column in python?如何根据 python 中的另一列创建重复数字序列?
【发布时间】:2021-12-09 17:18:41
【问题描述】:

我有这个数据集

Country Date ValueA
USA 2020-02-01 325
USA 2020-02-02 444
USA 2020-02-03 125
USA 2020-02-04 456
USA 2020-02-05 325
USA 2020-02-06 465
USA 2020-02-07 548
USA 2020-02-08 696
FRA 2020-02-01 357
FRA 2020-02-02 123
FRA 2020-02-03 125
FRA 2020-02-04 987
FRA 2020-02-05 343
FRA 2020-02-06 874
FRA 2020-02-07 658
FRA 2020-02-08 413

我想为每个国家/地区创建一个序列,以便以后按国家/地区和每 4 天分组。我正在寻找类似的东西

Country Date ValueA every_4
USA 2020-02-01 325 1
USA 2020-02-02 444 1
USA 2020-02-03 125 1
USA 2020-02-04 456 1
USA 2020-02-05 325 2
USA 2020-02-06 465 2
USA 2020-02-07 548 2
USA 2020-02-08 696 2
FRA 2020-02-01 357 1
FRA 2020-02-02 123 1
FRA 2020-02-03 125 1
FRA 2020-02-04 987 1
FRA 2020-02-05 343 2
FRA 2020-02-06 874 2
FRA 2020-02-07 658 2
FRA 2020-02-08 413 2

在 R 我相信它会是这样的

df = df %>% groupby(Country) %>% mutate(Every_4 = rep(seq(),4))

有人可以帮忙吗?非常感谢!!

【问题讨论】:

  • 如果没有连续几天会发生什么?

标签: python pandas date


【解决方案1】:

用途:

df['every_4'] = df.groupby('Country').transform(lambda x: x.groupby(x.index//4).ngroup()+1)['ValueA']

输出:

   Country        Date  ValueA  every_4
0      USA  2020-02-01     325        1
1      USA  2020-02-02     444        1
2      USA  2020-02-03     125        1
3      USA  2020-02-04     456        1
4      USA  2020-02-05     325        2
5      USA  2020-02-06     465        2
6      USA  2020-02-07     548        2
7      USA  2020-02-08     696        2
8      FRA  2020-02-01     357        1
9      FRA  2020-02-02     123        1
10     FRA  2020-02-03     125        1
11     FRA  2020-02-04     987        1
12     FRA  2020-02-05     343        2
13     FRA  2020-02-06     874        2
14     FRA  2020-02-07     658        2
15     FRA  2020-02-08     413        2

【讨论】:

    【解决方案2】:

    使用groupby_cumcount:

    df['every_4'] = df.groupby('Country').cumcount().floordiv(4).add(1)
    print(df)
    
    # Output:
       Country        Date  ValueA  every_4
    0      USA  2020-02-01     325        1
    1      USA  2020-02-02     444        1
    2      USA  2020-02-03     125        1
    3      USA  2020-02-04     456        1
    4      USA  2020-02-05     325        2
    5      USA  2020-02-06     465        2
    6      USA  2020-02-07     548        2
    7      USA  2020-02-08     696        2
    8      FRA  2020-02-01     357        1
    9      FRA  2020-02-02     123        1
    10     FRA  2020-02-03     125        1
    11     FRA  2020-02-04     987        1
    12     FRA  2020-02-05     343        2
    13     FRA  2020-02-06     874        2
    14     FRA  2020-02-07     658        2
    15     FRA  2020-02-08     413        2
    

    【讨论】:

    • 在此示例中,所有日期都已排序,并且没有遗漏日期。我让 OP 澄清这一点。
    猜你喜欢
    • 1970-01-01
    • 2020-04-24
    • 2022-08-19
    • 2023-02-11
    • 2021-03-30
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 2021-08-10
    相关资源
    最近更新 更多