[英]Replace column values according to values of consecutive rows in pandas
我有一個數據幀df_in
定義為:
import pandas as pd
dic_in = {'A':['aa','bb','cc','dd','ee','ff','gg','uu','xx','yy','zz'],
'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)
我想調查B
列,以便為具有相同連續值的所有行分配一個新值(根據我要描述的特定規則)。 我將舉一個更清楚的例子:前三rows['B']
等於200
。 因此,他們所有人都將分配數字1; 第四row['B']
和第五row['B']
等於400
因此它們將被分配為數字2。該過程將重復進行到最后。 最終結果( df_out
)應該如下所示:
# BEFORE # # AFTER #
In[121]:df_in In[125]df_out
Out[121]: Out[125]:
A B C A B C
0 aa 200 da 0 aa 1 da
1 bb 200 cs 1 bb 1 cs
2 cc 200 fr 2 cc 1 fr
3 dd 400 fs 3 dd 2 fs
4 ee 400 se 4 ee 2 se
5 ff 500 at 5 ff 3 at
6 gg 700 yu 6 gg 4 yu
7 uu 700 j5 7 uu 4 j5
8 xx 900 31 8 xx 5 31
9 yy 900 ds 9 yy 5 ds
10 zz 200 sz 10 zz 6 sz
注意事項
row['B']
等於200
但是分配給它的新值是6
而不是1
! 因此,不得有重復值。 您能建議我一個聰明的方法來使用熊貓來達到這樣的效果嗎?
PS:手動映射值沒有幫助,因為這是一個測試用例,最終我將有數千行要映射。 它應該是自動的。
print (df_in.B.ne(df_in.B.shift()))
0 True
1 False
2 False
3 True
4 False
5 True
6 True
7 False
8 True
9 False
10 True
Name: B, dtype: bool
df_in.B = df_in.B.ne(df_in.B.shift()).cumsum()
#same as !=, but 'ne' is faster
#df_in.B = (df_in.B != df_in.B.shift()).cumsum()
print (df_in)
A B C
0 aa 1 da
1 bb 1 cs
2 cc 1 fr
3 dd 2 fs
4 ee 2 se
5 ff 3 at
6 gg 4 yu
7 uu 4 j5
8 xx 5 31
9 yy 5 ds
10 zz 6 sz
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.