小编gbe*_*ger的帖子

扩展 Pandas 日期范围

我有看起来像这样的数据。每行代表某个日期该 ID 的一个值。

ID   Date         Value
A    2012-01-05   50
A    2012-01-08   100
A    2012-01-10   200
B    2012-07-01   10
B    2012-07-03   20
Run Code Online (Sandbox Code Playgroud)

我需要扩展它,以便我整天都有行。每天的值应该是前一天的值(即,将上面的数据视为值的更新,将下面的数据视为值的时间序列)。

ID   Date         Value
A    2012-01-05   50
A    2012-01-06   50
A    2012-01-07   50
A    2012-01-08   100
A    2012-01-09   100
A    2012-01-10   200
B    2012-07-01   10
B    2012-07-02   10
B    2012-07-03   20
Run Code Online (Sandbox Code Playgroud)

目前,我有一个解决方案,相当于以下内容:

  • 按 ID 分组
  • 对于每组,找出最小和最大日期
  • 创建一个 pd.date_range
  • 同时遍历行和日期范围,填充日期范围内的值,并在必要时增加指向行的索引指针
  • 将所有这些日期范围附加到最终数据帧

它有效,但似乎是一个非常糟糕的蛮力解决方案。我想知道 Pandas 是否支持更好的方法?

python pandas

3
推荐指数
1
解决办法
2650
查看次数

熊猫:每月日期范围与天数

假设我有一个这样的开始和结束日期:

start_d = datetime.date(2017, 7, 20)
end_d = datetime.date(2017, 9, 10)
Run Code Online (Sandbox Code Playgroud)

我希望获得一个如下所示的 Pandas DataFrame:

Month    NumDays
2017-07  12
2017-08  31
2017-09  10
Run Code Online (Sandbox Code Playgroud)

它显示了我的范围中包含的每个月的天数。

到目前为止,我可以使用pd.date_range(start_d, end_d, freq='MS').

python date-range pandas

3
推荐指数
1
解决办法
1665
查看次数

熊猫:根据条件向每组添加行

假设我有一个这样的 DataFrame:

         date  id  val
0  2017-01-01   1   10
1  2019-01-01   1   20
2  2017-01-01   2   50
Run Code Online (Sandbox Code Playgroud)

我想按id.
对于每个组,我想向其中添加一个新行,日期为从现在起 1 年。仅当该行晚于组中的最后一个日期时,才应添加该行。该行的 val 应与组中的最后一行相同。

决赛桌应如下所示:

         date  id  val
0  2017-01-01   1   10
1  2019-01-01   1   20
2  2017-01-01   2   50
3  2018-09-25   2   50   <-- new row
Run Code Online (Sandbox Code Playgroud)

当前代码如下。我可以得到一个掩码,显示哪些组需要附加一行,但不确定接下来要做什么。

>>> df = pd.DataFrame(data={'d': [datetime.date(2017, 1, 1), datetime.date(2019,1,1), datetime.date(2017,1,1)], 'id': [1,1,2], 'val': [10,20,50]})
>>> df = df.sort_values(by='d')
>>> future_date = (pd.datetime.now().date() + pd.DateOffset(years=1)).date()
>>> maxd = df.groupby('id')['d'].max()
>>> maxd < future_date …
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

3
推荐指数
2
解决办法
5174
查看次数

Pandas:用 groupby 中的日期重新索引,根据需要填充/维护值

我有以下数据帧。

>>> df = pd.DataFrame(data={'date': ['2010-05-01', '2010-07-01', '2010-06-01', '2010-10-01'], 'id': [1,1,2,2], 'val': [50,60,70,80], 'other': ['uno', 'uno', 'dos', 'dos']})
>>> df['date'] = df['date'].apply(lambda d: pd.to_datetime(d))
>>> df
        date  id other  val
0 2010-05-01   1   uno   50
1 2010-07-01   1   uno   60
2 2010-06-01   2   dos   70
3 2010-10-01   2   dos   80
Run Code Online (Sandbox Code Playgroud)

我想扩展这个 DataFrame 以便它包含 2010 年所有月份的行。

  • DataFrame 按以下方式分组 id,因此每个 id 将有 12 行。在本例中,共有 24 行。
  • val在每月,如果从最初的数据帧不存在,应为0。
  • Theother与 有一对一的关系id,所以我想保持这种方式。

我想要的结果如下:

         date  id other  val
0 …
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

3
推荐指数
1
解决办法
1774
查看次数

标签 统计

pandas ×4

python ×4

pandas-groupby ×2

date-range ×1