【问题标题】:Reset count of group after pandas dataframe concatenation [duplicate]熊猫数据框连接后重置组计数[重复]
【发布时间】:2019-06-21 16:41:54
【问题描述】:

我正在处理数据,但在连接 pandas 数据帧后如何重置组计数器时遇到问题。下面是一个例子来说明我的问题:

例如我有两个数据框:

   Counter       Value
0        1           3
1        1           4
2        1           2
3        2           4
4        2          10
   Counter       Value
0        1           8
1        1          10
2        2           2
3        2           4
4        2          10

连接后我得到:

   Counter       Value
0        1           3
1        1           4
2        1           2
3        2           4
4        2          10
0        1           8
1        1          10
2        2           2
3        2           4
4        2          10

我想重置计数器并使其连续并使计数器值比最后一组计数器大一个数字。

   Counter       Value
0        1           3
1        1           4
2        1           2
3        2           4
4        2          10
0        3           8
1        3          10
2        4           2
3        4           4
4        4          10

我试图将所有数据帧向上移动一个并将移位值与原始值进行比较,如果原始值大于移位值,则将原始值添加到其下方的所有值中。但由于原始数据嘈杂且不一致,此解决方案并不总是有效。

【问题讨论】:

  • 两个数据帧之间不会总是有一个数字的差异。我可以添加最后一行的值而不是一个,但是正如我提到的,在连接之前,代表计数器列的大多数时间数字在数据帧中甚至不是连续的
  • 这就是我删除它的原因。@yatu ans 有意义的是在连接之前取最大值并添加

标签: python pandas dataframe


【解决方案1】:

您可以在连接之前将第一个数据帧中Counter 列中的最大值添加到第二个数据帧:

df2.Counter += df1.Counter.max()
pd.concat([df1, df2], ignore_index=True)

     Counter  Value
0        1      3
1        1      4
2        1      2
3        2      4
4        2     10
5        3      8
6        3     10
7        4      2
8        4      4
9        4     10

【讨论】:

    【解决方案2】:

    或者使用shift()的其他方式:

    df=pd.concat([df1,df2])
    df=df.assign(Counter_1=df.Counter.ne(df.Counter.shift()).cumsum())
    #for same col df=df.assign(Counter=df.Counter.ne(df.Counter.shift()).cumsum())
    

       Counter  Value  Counter_1
    0        1      3          1
    1        1      4          1
    2        1      2          1
    3        2      4          2
    4        2     10          2
    0        1      8          3
    1        1     10          3
    2        2      2          4
    3        2      4          4
    4        2     10          4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 2016-03-13
      • 2021-07-02
      • 1970-01-01
      • 2021-12-26
      • 2020-12-19
      • 2017-11-05
      相关资源
      最近更新 更多