繁体   English   中英

替换列中的重复值

[英]Replace repetitive values in column

我想在N=31达到后添加一个值不等于列N列,然后像plt.plot(X[N==1],FT[N==1]), plt.plot(X[new_col==63],FT[new_col==63])数据如下


+-------+-----+----+-------+-------+
| X     |  N  | CN | Vdiff | FT    |
+-------+-----+----+-------+-------+ 
|   524 |   2 |  1 |   0.0 | 0.12. |
|   534 |   2 |  1 |   0.0 |0.134. |
|   525 |   2 |  1 |   0.0 |0.154. |
|     . |     |    |       |.      |
|     . |     |    |       |.      |
|  5976 |  31 | 14 |   0.0 |3.54.  |
|  5913 |  31 | 29 |   0.1 |3.98.  |
|  5923 |   0 | 29 |   0.0 |3.87.  |
|     . |     |    |       |.      |
|     . |     |    |       |.      |
| 33001 |   7 | 36 |   0.0 |7.36   |
| 33029 |   7 | 36 |   0.0 |8.99   |
| 33023 |   7 | 43 |   0.1 |12.45  |
| 33114 |   0 | 43 |   0.0 |14.33  |
+-------+-----+----+-------+-------+

我想要的解决方案是

+-------+-----+----+-------+------+
| X     |  N  | CN | new_col | FT  |
+-------+-----+----+-------+------+ 
|   524 |   2 |  1 |   2 | 0.12. |
|   534 |   2 |  1 |   2 |0.134. |
|   525 |   2 |  1 |   2 |0.154. |
|     . |     |    |     |.      |
|     . |     |    |     |.      |
|  5976 |  31 | 14 |  31 |3.54.  |
|  5913 |  31 | 29 |  31 |3.98.  |
|  5923 |   0 | 29 |  32 |3.87.  |
|     . |     |    |     |.      |
|     . |     |    |     |.      |
| 33001 |   7 | 36 |  45 |7.36   |
| 33029 |   7 | 36 |  45 |8.99   |
| 33023 |   7 | 43 |  45 |12.45  |
| 33114 |   0 | 43 |  46 |14.33  |
+-------+-----+----+-------+-------+

请注意, new_col中的值也应该像N值一样重复,并且不应在每个新行中更改。

这是您需要的输出吗? 我们不能简单地按N groupby ,因为它具有重复的、不相邻的值,因为我们需要保留顺序。 我们在这里计算N与其之前的值相比发生变化的情况。

import pandas as pd
from io import StringIO

df = pd.read_csv(StringIO(
"""X|N|CN|Vdiff|FT
524|2|1|0.0|0.12
534|2|1|0.0|0.134
525|2|1|0.0|0.154
5976|31|14|0.0|3.54
5913|31|29|0.1|3.98
5923|0|29|0.0|3.87
33001|7|36|0.0|7.36
33029|7|36|0.0|8.99
33023|7|43|0.1|12.45
33114|0|43|0.0|14.33"""), sep="|")

# works in pandas 1.2
#>>> df["new_val"] = df.eval("C = N.shift().bfill() != N")["C"].astype(int).cumsum()

# works in older pandas
>>> df["new_val"] = (df.N.shift().bfill() != df.N).astype(int).cumsum()
>>> df
       X   N  CN  Vdiff      FT  new_val
0    524   2   1    0.0   0.120        0
1    534   2   1    0.0   0.134        0
2    525   2   1    0.0   0.154        0
3   5976  31  14    0.0   3.540        1
4   5913  31  29    0.1   3.980        1
5   5923   0  29    0.0   3.870        2
6  33001   7  36    0.0   7.360        3
7  33029   7  36    0.0   8.990        3
8  33023   7  43    0.1  12.450        3
9  33114   0  43    0.0  14.330        4

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM