簡體   English   中英

根據熊貓中連續行的值替換列值

[英]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 因此,不得有重復值。
  • 值必須始終從1開始,因此應按遞增順序排列。

您能建議我一個聰明的方法來使用熊貓來達到這樣的效果嗎?

PS:手動映射值沒有幫助,因為這是一個測試用例,最終我將有數千行要映射。 它應該是自動的。

您可以比較ne移列,然后使用cumsum

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM