【问题标题】:Pandas: Add new dataframe column based on the dates of other smaller dataframe熊猫:根据其他较小数据框的日期添加新的数据框列
【发布时间】:2022-12-14 04:36:08
【问题描述】:

我有一个看起来像这样的数据框(link to csv):

time  ,  value
 0    ,   10
 1    ,   20
 2    ,   35
 3    ,   30
 4    ,   40
 5    ,   40
 6    ,   60

我想根据这个较小数据框 (link to csv) 的值填充另一列 recentActive

time  ,  value , activatedTime , deactivatedTime
 1    ,   20   ,      1        ,       5
 3    ,   30   ,      3        ,       4

recentActive 列中,我们应该有尚未停用的最新激活值。一旦一个值被停用,那么我们应该用以前仍然有效的值填充它。最终的数据框应该是这样的:

time  ,  value  ,  recentActive
 0    ,   10    ,      NaN
 1    ,   20    ,      20   (t=1 activated)
 2    ,   30    ,      20
 3    ,   30    ,      30   (t=3 activated)
 4    ,   40    ,      30   (t=3 deactivated)
 5    ,   40    ,      20   (t=1 deactivated)
 6    ,   60    ,      NaN  (no active values)

我怎样才能做到这一点?最好只使用矢量化操作,谢谢!

【问题讨论】:

  • 现实生活中每个数据框有多大?
  • 较大的大约有 15000 行,较小的大约有 500 行
  • @mozway 关于如何执行此操作的任何建议?

标签: python pandas dataframe


【解决方案1】:

如果您想要一个高性能的解决方案,实现起来有点复杂。

您可以构建一个IntervalIndex,包括一个“包罗万象”的间隔(最小-最大,否则切片将因缺失值而失败),然后切片并聚合与groupby.last匹配的潜在多个间隔以仅保留第一个每个初始值。

这假定 df1df2 作为输入,并要求 df2activatedTime 上排序。

idx = pd.IntervalIndex.from_arrays(np.r_[df1['time'].min(), df2['activatedTime']],
                                   np.r_[df1['time'].max(), df2['deactivatedTime']],
                                   closed='both')
intervals = pd.Series(np.r_[np.nan, df2['value']]).set_axis(idx)

s = intervals.loc[df1['time']]
# make groups if intervals are increasing
group = s.index.left.to_series().diff().le(0).cumsum()
df1['recentActive'] = s.groupby(group.to_numpy()).last()

输出:

   time  value  recentActive
0     0     10           NaN
1     1     20          20.0
2     2     35          20.0
3     3     30          30.0
4     4     40          30.0
5     5     40          20.0
6     6     60           NaN

【讨论】:

    猜你喜欢
    • 2017-01-14
    • 2019-12-09
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    相关资源
    最近更新 更多