为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

芜湖不芜 2022-06-02 16:00:03
给定如下数据数据Time    Col01   Col0205:17:55.703000 NaN NaN05:17:55.703000 891 1205:17:55.703000 891 1305:17:55.703000 891 1505:17:55.703000 891 1605:17:55.703000 891 1705:17:55.703000 891 1805:17:55.707000 892  005:17:55.707000 892  105:17:55.707000 892  505:17:55.707000 892  605:17:55.707000 892  705:17:55.708000 NaN  NaN05:17:55.711000 892 1005:17:55.711000 892 1105:17:55.711000 892 1205:17:55.723000 893 1105:17:55.723000 893 1505:17:55.723000 893 1605:17:55.726000 NaN  NaNNaN如果当前 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 |                                        |+-----------------+-------+-------+----------+----------+----------------------------------------+
查看完整描述

2 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

填写正确的顺序,先向前然后向后(如果为空,则只获取第一行)。


pd.concat([df, df[['Col01', 'Col02']].ffill().bfill(downcast='infer').add_suffix('new')], axis=1)

               Time  Col01  Col02  Col01new  Col02new

0   05:17:55.703000    NaN    NaN       891        12

1   05:17:55.703000  891.0   12.0       891        12

2   05:17:55.703000  891.0   13.0       891        13

3   05:17:55.703000  891.0   15.0       891        15

4   05:17:55.703000  891.0   16.0       891        16

5   05:17:55.703000  891.0   17.0       891        17

6   05:17:55.703000  891.0   18.0       891        18

7   05:17:55.707000  892.0    0.0       892         0

8   05:17:55.707000  892.0    1.0       892         1

9   05:17:55.707000  892.0    5.0       892         5

10  05:17:55.707000  892.0    6.0       892         6

11  05:17:55.707000  892.0    7.0       892         7

12  05:17:55.708000    NaN    NaN       892         7

13  05:17:55.711000  892.0   10.0       892        10

14  05:17:55.711000  892.0   11.0       892        11

15  05:17:55.711000  892.0   12.0       892        12

16  05:17:55.723000  893.0   11.0       893        11

17  05:17:55.723000  893.0   15.0       893        15

18  05:17:55.723000  893.0   16.0       893        16

19  05:17:55.726000    NaN    NaN       893        16


查看完整回答
反对 回复 2022-06-02
?
ibeautiful

TA贡献1993条经验 获得超5个赞

这也可以

df.ffill(axis=0).bfill(axis=0)

如果您想要单独的列,您可以在执行此操作之前复制列


查看完整回答
反对 回复 2022-06-02
  • 2 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信