【问题标题】:Iterating through a data frame and grouping values in a range遍历数据框并对范围内的值进行分组
【发布时间】:2021-01-19 16:12:14
【问题描述】:

我有一个这样的每周数据的 python 数据框:

Week Val
1    11
2    11
3    11
4    11
5    9
6    9
7    9
8    9

我想创建一个这样的输出表:

Week 1 Week 2 Val
1      4      11
5      8      9

抱歉,我对 python 及其迭代工具很陌生。我不知道如何解决这个问题。 我尝试使用前一行的列进行匹配,但我不认为如何更进一步:

df['Match'] = df['Val'].eq(df['Val'].shift(-1))

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    您想按Val 的连续块进行分组。所以你可以在非零差异上使用cumsum来获取块:

    blocks = df['Val'].ne(df['Val'].shift(1)).cumsum()
    
    (df.groupby(blocks, as_index=False)
       .agg(Week1=('Week','min'), Week2=('Week','max'), Val=('Val', 'first'))
    )
    

    或者你可以链接:

    (df.groupby(df['Val'].ne(df['Val'].shift(1)).cumsum(), as_index=False)
       .agg(Week1=('Week','min'), Week2=('Week','max'),Val=('Val', 'first'))
    )
    

    输出:

       Week1  Week2  Val
    0      1      4   11
    1      5      8    9
    

    【讨论】:

    • 谢谢。但我得到以下错误:DataFrame' 对象不可调用
    猜你喜欢
    • 2014-07-23
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 2021-07-22
    • 2015-07-10
    相关资源
    最近更新 更多