根据索引替换列表中的项目

时间:2021-07-18 18:56:32

标签: python pandas for-loop if-statement rows

我有一个包含 3 列 (A, B, C) 的数据框。

  • A 是一个从 0 到 n(等于行索引)的数字,我需要为将使用数据帧读取文件并使用它的设备生成它。

  • B 是一个值为 100 或低于该值的列。

  • C 是具有位置值的列,例如 0、0.5、1、1.5 等。

目标是制作第四列 D,根据行填充 1's2's。例如,假设每 3、4 或 5 行将放置一个 2,这取决于与 size = 0.5 列一起使用的名为 C 的变量。您可以在下面找到一个示例,说明数据框在 D 列中的外观。

df 示例:

| A | B | C | D |
|---|---|---|---|
| 0 | 100 | 0 | 1 |
| 1 | 100 | 0 | 2 |
| 2 | 1 | 0 | 1 |
| 3 | 1 | 0 | 1 |
| 4 | 1 | 0 | 1 |
| 5 | 1 | 0 | 1 |
| 6 | 1 | 0 | 1 |
| 7 | 1 | 0 | 1 |
| 8 | 1 | 0 | 1 |
| 9 | 1 | 0 | 1 |
| 10 | 1 | 0 | 1 |
| 11 | 1 | 0 | 1 |
| 12 | 1 | 0 | 1 |
| 13 | 1 | 0 | 1 |
| 14 | 100 | 0.5 | 1 |
| 15 | 100 | 0.5 | 2 |
| 16 | 1 | 0.5 | 1 |
| 17 | 1 | 0.5 | 1 |
| 18 | 1 | 0.5 | 2 |
| 19 | 1 | 0.5 | 1 |
| 20 | 1 | 0.5 | 1 |
| 21 | 1 | 0.5 | 1 |
| 22 | 1 | 0.5 | 2 |
| 23 | 1 | 0.5 | 1 |
| 24 | 1 | 0.5 | 1 |
| 25 | 1 | 0.5 | 1 |
| 26 | 1 | 0.5 | 2 |
| 27 | 1 | 0.5 | 1 |

我正在使用的一些代码可以在下面找到。

for num in df.A:
            if ((df.A[num] % 2 == 0) and (df.B[num] == 100)):
                D.append(1)    

            elif ((df.A[num] % 2 != 0) and (df.B[num] == 100)):
                D.append(2)

            elif df.B[num] != 100:
                D.append(1)            

                ##### ------ This code doesn't work as expected
                if size < df.C[num] <= 2 * size:
                    for row in range(len(df)):
                        if row % 5 == 0:
                            D[num] = 2      

                # Code to complete the next step which will be similar to the previous
                elif 2 * size < df.C[num] <= 3 * size:
                    pass

部分标记 ##### ------ This code doesn't work as expected 仅输出 2's 而不是具有 1's 并且仅针对所选行输出 2's。我想使用基于 % 的条件可能不是最好的方法,因为我希望 2's 是等距的。但是,我想不出更好的方法。

关于如何解决这个问题的任何想法? 非常感谢。

0 个答案:

没有答案