Pandas - 如何创建一个新列,该列从前一行或下一行(如果第一行)的列中获取值

给定如下数据数据


Time    Col01   Col02

05:17:55.703000 NaN NaN

05:17:55.703000 891 12

05:17:55.703000 891 13

05:17:55.703000 891 15

05:17:55.703000 891 16

05:17:55.703000 891 17

05:17:55.703000 891 18

05:17:55.707000 892  0

05:17:55.707000 892  1

05:17:55.707000 892  5

05:17:55.707000 892  6

05:17:55.707000 892  7

05:17:55.708000 NaN  NaN

05:17:55.711000 892 10

05:17:55.711000 892 11

05:17:55.711000 892 12

05:17:55.723000 893 11

05:17:55.723000 893 15

05:17:55.723000 893 16

05:17:55.726000 NaN  NaN

NaN如果当前 col基于以下逻辑,则需要创建两个新的 cols


+-----------------+-------+-------+----------+----------+----------------------------------------+

|      Time       | Col01 | Col02 | Col01new | Col02new |                                        |

+-----------------+-------+-------+----------+----------+----------------------------------------+

| 05:17:55.703000 | NaN   | NaN   |      891 |       12 | if NaN & first row, fill from next row |

| 05:17:55.703000 | 891   | 12    |      891 |       12 |                                        |

| 05:17:55.703000 | 891   | 13    |      891 |       13 |                                        |

| 05:17:55.703000 | 891   | 15    |      891 |       15 |                                        |

| 05:17:55.703000 | 891   | 16    |      891 |       16 |                                        |

| 05:17:55.703000 | 891   | 17    |      891 |       17 |                                        |

| 05:17:55.703000 | 891   | 18    |      891 |       18 |                                        |

| 05:17:55.707000 | 892   |  0    |      892 |        0 |                                        |

+-----------------+-------+-------+----------+----------+----------------------------------------+



芜湖不芜
浏览 143回答 2
2回答

红颜莎娜

填写正确的顺序,先向前然后向后(如果为空,则只获取第一行)。pd.concat([df, df[['Col01', 'Col02']].ffill().bfill(downcast='infer').add_suffix('new')], axis=1)               Time  Col01  Col02  Col01new  Col02new0   05:17:55.703000    NaN    NaN       891        121   05:17:55.703000  891.0   12.0       891        122   05:17:55.703000  891.0   13.0       891        133   05:17:55.703000  891.0   15.0       891        154   05:17:55.703000  891.0   16.0       891        165   05:17:55.703000  891.0   17.0       891        176   05:17:55.703000  891.0   18.0       891        187   05:17:55.707000  892.0    0.0       892         08   05:17:55.707000  892.0    1.0       892         19   05:17:55.707000  892.0    5.0       892         510  05:17:55.707000  892.0    6.0       892         611  05:17:55.707000  892.0    7.0       892         712  05:17:55.708000    NaN    NaN       892         713  05:17:55.711000  892.0   10.0       892        1014  05:17:55.711000  892.0   11.0       892        1115  05:17:55.711000  892.0   12.0       892        1216  05:17:55.723000  893.0   11.0       893        1117  05:17:55.723000  893.0   15.0       893        1518  05:17:55.723000  893.0   16.0       893        1619  05:17:55.726000    NaN    NaN       893        16

ibeautiful

这也可以df.ffill(axis=0).bfill(axis=0)如果您想要单独的列,您可以在执行此操作之前复制列
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python