【问题标题】:panas groupby and checking against prior/next row熊猫 groupby 并检查前/下一行
【发布时间】:2021-01-06 16:15:41
【问题描述】:

我正在将某些数据分配到年份,有时由于时间原因它会落在错误的年份并且需要手动更正数据。 (长篇大论)看下面的例子,会更容易理解:

import pandas as pd

years=[2000,2001,2002,2003,2004,2005,2000,2001,2002,2003,2004,2005]
symbols=['ABC','ABC','ABC','ABC','ABC','ABC', 'DEF','DEF','DEF', 'DEF','DEF','DEF']
c=[3, 3, 2, 4, 3, 3, 3, 3, 4, 2, 3, 3]
df= pd.DataFrame({'y':years, 'g':symbols, 'count':c})

           y    g  count
    0   2000  ABC      3
    1   2001  ABC      3
    2   2002  ABC      2
    3   2003  ABC      4
    4   2004  ABC      3
    5   2005  ABC      3
    6   2000  DEF      3
    7   2001  DEF      3
    8   2002  DEF      4
    9   2003  DEF      2
    10  2004  DEF      3
    11  2005  DEF      3

我希望我的输出看起来像这样 (这意味着我想将 2003 年 ABC 观测的第一个移动到 2002 年,并将 2002 年 DEF 观测的最后一个移动到 2003 年)

           y    g  count result
0   2000  ABC      3
1   2001  ABC      3
2   2002  ABC      2
3   2003  ABC      4   2002
4   2004  ABC      3
5   2005  ABC      3
6   2000  DEF      3
7   2001  DEF      3
8   2002  DEF      4   2003
9   2003  DEF      2
10  2004  DEF      3
11  2005  DEF      3

我不知道如何编写代码来比较每一行与前一行和下一行,同时按.....

【问题讨论】:

  • 模式不清楚...
  • if previous_row.C current_row.C 然后做点什么……
  • 还没有整理好....

标签: python pandas group-by pandas-groupby row


【解决方案1】:

我通过 groupby().shift() 弄清楚了如何做我想做的事

df['prev']=df.groupby(['g'])['count'].shift(1)
 df['next']=df.groupby(['g'])['count'].shift(-1)

【讨论】:

    猜你喜欢
    • 2020-12-12
    • 1970-01-01
    • 2019-02-24
    • 2020-11-13
    • 2017-10-17
    • 2019-02-24
    • 1970-01-01
    • 2021-07-16
    • 2019-09-16
    相关资源
    最近更新 更多