我有一个像这样的数据框 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。
我 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
你能给我推荐一个聪明的方法来实现这个目标吗?
最佳答案
使用shift
和 any
比较连续的行,使用 True
指示值应该更改的位置。然后用cumsum
取累计和获得增加的值(value):
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
关于python - 比较 2 个连续的行,如果不同则分配递增的值(使用 Pandas),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40979760/