代码之家  ›  专栏  ›  技术社区  ›  Richard

熊猫:计算行之间的差异

  •  1
  • Richard  · 技术社区  · 4 年前

    df = pd.DataFrame([{ "state": "CA", "total":2, "week": 10 },{ "state": "UT", "total": 7, "week": 10 },{ "state": "CA", "total": 14, "week": 11 },{ "state": "UT", "total":18, "week": 11 },{ "state": "CA", "total": 21, "week": 12 },{ "state": "UT", "total": 30, "week": 12 }])
    

    这个 total

    state,total,week,diff
    CA,2,10,NaN
    UT,7,10,NaN
    CA,14,11,12
    UT,18,11,11
    CA,21,12,7
    UT,30,12,12
    

    我怎么从这里到那里?我可以通过在这些行上循环来实现这一点,但我不知道从哪里开始在熊猫身上这样做。

    1 回复  |  直到 4 年前
        1
  •  4
  •   Michael Szczesny    4 年前

    你可以这样做

    df['diff'] = df.groupby('state')['total'].diff()
    df
    

    输出:

      state  total  week  diff
    0    CA      2    10   NaN
    1    UT      7    10   NaN
    2    CA     14    11  12.0
    3    UT     18    11  11.0
    4    CA     21    12   7.0
    5    UT     30    12  12.0
    

    pandas 0.24 你可以用 nullable int types 但不常用

    df['diff'] = df.groupby('state')['total'].diff().astype(pd.Int64Dtype())
    df
    

    输出:

      state  total  week  diff
    0    CA      2    10  <NA>
    1    UT      7    10  <NA>
    2    CA     14    11    12
    3    UT     18    11    11
    4    CA     21    12     7
    5    UT     30    12    12