比较2个连续行,并分配增加的价值,如果不同(使用pandas)[英] Compare 2 consecutive rows and assign increasing value if different (using Pandas)

本文是小编为大家收集整理的关于比较2个连续行,并分配增加的价值,如果不同(使用pandas)的处理方法,想解了比较2个连续行,并分配增加的价值,如果不同(使用pandas)的问题怎么解决?比较2个连续行,并分配增加的价值,如果不同(使用pandas)问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个dataframe df_in,所以:

import pandas as pd
dic_in = {'A':['aa','aa','bb','cc','cc','cc','cc','dd','dd','dd','ee'],
       'B':['200','200','200','400','400','500','700','700','900','900','200'],
       'C':['da','cs','fr','fs','se','at','yu','j5','31','ds','sz']}
df_in = pd.DataFrame(dic_in)

我想以以下方式研究2列A和B. I 2连续rows[['A','B']]是相等的,然后将它们分配为新值(根据我要描述的特定规则). 我将举一个例子,以更清楚:如果第一个row[['A','B']]等于以下一个,则我设置1;如果第二个等于第三个,那么我将设置1.每次连续两行都不同时,我就会增加1的设置值.

.

结果应该像这样:

     A    B   C  value
0   aa  200  da      1
1   aa  200  cs      1
2   bb  200  fr      2
3   cc  400  fs      3
4   cc  400  se      3
5   cc  500  at      4
6   cc  700  yu      5
7   dd  700  j5      6
8   dd  900  31      7
9   dd  900  ds      7
10  ee  200  sz      8

您能建议我一个实现此目标的聪明人吗?

推荐答案

使用 > and any any ,使用True指示值应在哪里更改.然后,使用为了获得不断增长的价值:

df_in['value'] = (df_in[['A', 'B']] != df_in[['A', 'B']].shift()).any(axis=1)
df_in['value'] = df_in['value'].cumsum()

或者,将其凝结到一行:

df_in['value'] = (df_in[['A', 'B']] != df_in[['A', 'B']].shift()).any(axis=1).cumsum()

结果输出:

     A    B   C  value
0   aa  200  da      1
1   aa  200  cs      1
2   bb  200  fr      2
3   cc  400  fs      3
4   cc  400  se      3
5   cc  500  at      4
6   cc  700  yu      5
7   dd  700  j5      6
8   dd  900  31      7
9   dd  900  ds      7
10  ee  200  sz      8

本文地址:https://www.itbaoku.cn/post/1727985.html