【问题标题】:Forward filling based on the value of other column根据其他列的值前向填充
【发布时间】:2019-06-06 15:53:05
【问题描述】:

更新: 我有一个带有 admissionTime、dischargeTime、pat_name、pat_rec 的大型 pandas 数据框,它有大约 500 万条记录。我正在尝试根据其余列的放电时间日期时间值转发填充列放电时间、pat_name 并在此之后中断。

df:

admitTime dischargeTime pat_name pat_rec
2013-12-23 20:20:30 2013-12-23 21:03:00 Alex A4536
2013-12-23 21:00:30 2013-12-23 21:01:00 2013-12-23 21:01:30 2013-12-23 21:02:00 2013-12-23 21:02:30 2013-12-23 21:03:00 2013-12-23 21:03:30 2013-12-23 21:04:00 2013-12-23 21:04:30 2013-12-23 21:05:00 2013-12-23 21:08:30 Sam A4523 2013-12-23 21:06:00 2013-12-23 21:06:30 2013-12-23 21:07:00 2013-12-23 21:07:30 2013-12-23 21:08:00 2013-12-23 21:08:30 2013-12-23 21:09:00 2013-12-23 21:09:30 2013-12-23 21:13:30 Mike A9873 2013-12-23 21:10:00 2013-12-23 21:10:30 2013-12-23 21:11:00 2013-12-23 21:11:30 2013-12-23 21:12:00 2013-12-23 21:12:30 2013-12-23 21:13:00 2013-12-23 21:13:30 2013-12-23 21:14:00
2013-12-23 21:14:30

理想情况下,我希望我的 df 看起来像

datetime discchargeTime pat_name pat_rec
2013-12-23 20:20:30 2013-12-23 21:03:00 Alex A4536
2013-12-23 21:00:30 2013-12-23 21:03:00 Alex A4536 2013-12-23 21:01:00 2013-12-23 21:03:00 Alex A4536 2013-12-23 21:01:30 2013-12-23 21:03:00 Alex A4536 2013-12-23 21:02:00 2013-12-23 21:03:00 Alex A4536 2013-12-23 21:02:30 2013-12-23 21:03:00 Alex A4536 2013-12-23 21:03:00 2013-12-23 21:03:00 Alex A4536 2013-12-23 21:03:30
2013-12-23 21:04:00
2013-12-23 21:04:30
2013-12-23 21:05:00 2013-12-23 21:08:30 Sam A4523 2013-12-23 21:05:30 2013-12-23 21:08:30 Sam A4523 2013-12-23 21:06:00 2013-12-23 21:08:30 Sam A4523 2013-12-23 21:06:30 2013-12-23 21:08:30 Sam A4523 2013-12-23 21:07:00 2013-12-23 21:08:30 Sam A4523 2013-12-23 21:07:30 2013-12-23 21:08:30 Sam A4523 2013-12-23 21:08:00 2013-12-23 21:08:30 Sam A4523 2013-12-23 21:08:30 2013-12-23 21:08:30 Sam A4523 2013-12-23 21:09:00
2013-12-23 21:09:30 2013-12-23 21:13:30 Mike A9873 2013-12-23 21:10:00 2013-12-23 21:13:30 Mike A9873 2013-12-23 21:10:30 2013-12-23 21:13:30 Mike A9873 2013-12-23 21:11:00 2013-12-23 21:13:30 Mike A9873 2013-12-23 21:11:30 2013-12-23 21:13:30 Mike A9873 2013-12-23 21:12:00 2013-12-23 21:13:30 Mike A9873 2013-12-23 21:12:30 2013-12-23 21:13:30 Mike A9873 2013-12-23 21:13:00 2013-12-23 21:13:30 Mike A9873 2013-12-23 21:13:30 2013-12-23 21:13:30 Mike A9873 2013-12-23 21:14:00
2013-12-23 21:14:30

我尝试了df[column_name].ffill(),但后来意识到这不是正确的做法。

如果我能得到任何建议,我将不胜感激。

【问题讨论】:

标签: python python-3.x pandas dataframe data-manipulation


【解决方案1】:

您可以向前填充,然后使用布尔过滤器将值恢复为NaN

fill_cols = ['dischargeTime', 'pat_name', 'pat_rec']
df[fill_cols] = df[fill_cols].ffill()
df[fill_cols] = df[fill_cols].mask(df['admitTime'] > df['dischargeTime'])

【讨论】:

  • 当 admissionime 与 datetime 匹配时,前向填充不会停止。它仍在继续向前填充,直到在dischargetime列中找到下一条记录
  • @ALB2345,抱歉,请参阅更新,您必须分两步完成此操作。
猜你喜欢
  • 2019-11-21
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
相关资源
最近更新 更多