python - 根据 pandas 中连续行的值替换列值

标签 python pandas dataframe replace sequence

我有一个数据框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']等于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 开始,因此按递增顺序排列。

你能建议我一个聪明的方法来使用 pandas 实现这样的结果吗?

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

关于python - 根据 pandas 中连续行的值替换列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40974743/

相关文章:

python - 关闭 Django 开发服务器上的模型验证

Pythons Pandas,在 GroupBy 对象上应用函数 "indexes"

python - 值错误 : 'object too deep for desired array'

python - 如何将两个 DataFrame 合并为单个匹配列值

pandas 从列列表中分配结果

python - 如何在带有一些空单元格的 Bokeh 中创建绘图网格

python - 从 CGI 在后台运行 python 脚本

Python:需要解析帮助!

python - 从json中提取字段

r - 将列添加到数据框中,在另一列中测试分类变量