Pandas Group/Merge Dataframe by Non-Periodic Series
Posted
技术标签:
【中文标题】Pandas Group/Merge Dataframe by Non-Periodic Series【英文标题】: 【发布时间】:2021-05-28 05:45:23 【问题描述】:如何将一个 DataFrame 按另一个可能的非周期性系列分组?样机如下:
这是要拆分的DataFrame:
i = pd.date_range(end="today", periods=20, freq="d").normalize()
v = np.random.randint(0,100,size=len(i))
d = pd.DataFrame("value": v, index=i)
>>> d
value
2021-02-06 48
2021-02-07 1
2021-02-08 86
2021-02-09 82
2021-02-10 40
2021-02-11 22
2021-02-12 63
2021-02-13 37
2021-02-14 41
2021-02-15 57
2021-02-16 30
2021-02-17 69
2021-02-18 63
2021-02-19 27
2021-02-20 23
2021-02-21 46
2021-02-22 66
2021-02-23 10
2021-02-24 91
2021-02-25 43
这是拆分标准,按系列日期分组。一个组由任何有序的数据帧值 v
组成,这样 v
与 [s,s+1)
相交 - 但与重采样一样,控制包含参数会很好。
s = pd.date_range(start="2019-10-14", freq="2W", periods=52).to_series()
s = s.drop(np.random.choice(s.index, 10, replace=False))
s = s.reset_index(drop=True)
>>> s[25:29]
25 2021-01-24
26 2021-02-07
27 2021-02-21
28 2021-03-07
dtype: datetime64[ns]
这是示例输出......或类似的东西。索引取自系列而不是数据框。
>>> ???.sum()
value
...
2021-01-24 47
2021-02-07 768
2021-02-21 334
...
在内部,组将具有以下结构:
...
2021-01-10
sum: 0
2021-01-24
2021-02-06 47
sum: 47
2021-02-07
2021-02-07 52
2021-02-08 56
2021-02-09 21
2021-02-10 39
2021-02-11 86
2021-02-12 30
2021-02-13 20
2021-02-14 76
2021-02-15 91
2021-02-16 70
2021-02-17 34
2021-02-18 73
2021-02-19 41
2021-02-20 79
sum: 768
2021-02-21
2021-02-21 90
2021-02-22 75
2021-02-23 12
2021-02-24 70
2021-02-25 87
sum: 334
2021-03-07
sum: 0
...
【问题讨论】:
上一个示例中的数字是否正确?我想我知道你想做什么,但我没有准确地得到这些数字。 你是对的,必须再次运行它并返回一组不同的随机数。 @user19087 始终为可重复性设置种子... 【参考方案1】:看起来你可以做到:
bucket = pd.cut(d.index, bins=s, label=s[:-1], right=False)
d.groupby(bucket).sum()
【讨论】:
并返回一个 DatetimeIndex:,r.index = pd.to_datetime(r.index)
。除非有更好的方法?以上是关于Pandas Group/Merge Dataframe by Non-Periodic Series的主要内容,如果未能解决你的问题,请参考以下文章