亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查找時間范圍內的現值,pandas

查找時間范圍內的現值,pandas

PHP
桃花長相依 2023-11-09 16:58:22
我正在使用一個包含不同產品的數據框(每個產品都有不同的產品參考,在此數據框中為“PR”),這些產品具有特定的工作時間范圍。import pandas as pdimport numpy as npnp.random.seed(123)df = pd.DataFrame({     'PR':("1","2","3","4","5","18"),    'StartDate':pd.date_range('1/1/2011', periods=6, freq='D'),    'EndDate':np.random.choice( pd.date_range('1/1/2011', periods=365,                           freq='D'), 6, replace=False)     })打印出這個表                PR  StartDate   EndDate           0    1   2011-01-01  2011-03-01           1    2   2011-01-02  2011-11-06           2    3   2011-01-03  2011-01-10           3    4   2011-01-04  2011-10-27           4    5   2011-01-05  2011-08-31           5    18  2011-01-06  2011-06-06我想知道在任何給定月份有多少產品處于活動狀態(在本例中:(2011-01,1 個產品活動),(2011-02,5 個產品活動),(2011-04,4 個產品活動)等。 .. 我怎樣才能做到這一點?
查看完整描述

2 回答

?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

StartDate如果給定的產品在,范圍內,您可以檢查每個月EndDate。


In [26]: pd.Series(

            {dt: ((df.StartDate <= dt) & (df.EndDate >= dt)).sum()

             for dt in pd.date_range(start='2011-01-01', freq='1MS', periods=6)})

Out[26]:       

2011-01-01    1

2011-02-01    5

2011-03-01    5

2011-04-01    4

2011-05-01    4

2011-06-01    4

dtype: int64   


查看完整回答
反對 回復 2023-11-09
?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

這是另一種方法:


df.assign(dates = [pd.date_range(s,f, freq='MS') for s, f in zip(df['StartDate'], df['EndDate'])])\

  .explode('dates').groupby('dates')['PR'].nunique()

輸出:


dates

2011-01-01    1

2011-02-01    5

2011-03-01    5

2011-04-01    4

2011-05-01    4

2011-06-01    4

2011-07-01    3

2011-08-01    3

2011-09-01    2

2011-10-01    2

2011-11-01    1

Name: PR, dtype: int64


查看完整回答
反對 回復 2023-11-09
  • 2 回答
  • 0 關注
  • 163 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號