簡體   English   中英

Pandas:根據每個組的日期條件插入新行

[英]Pandas: Inserting new row based on date condition for each group

我有一個 dataframe 如下所示:

  Date        Group   Value   Duration
2018-01-01      A      20       30
2018-02-01      A      10       60
2018-01-01      B      15      180
2018-02-01      B      30      210
2018-03-01      B      25      238 
2018-01-01      C      10      235

在上面的df中,我們看到 A 組的最后日期是2018-02-01 我想插入一個Date2018-03-01的行並復制前一行的值。 因此,換句話說,對於每個組,我希望通過插入重復行直到Date達到2018-03-01來獲得相等數量的行數。

我得到的 Dataframe 看起來像

  Date        Group   Value   Duration
2018-01-01      A      20       30
2018-02-01      A      10       60
2018-03-01      A      10       60   <----New Row 
2018-01-01      B      15      180
2018-02-01      B      30      210
2018-03-01      B      25      238  
2018-01-01      C      10      235
2018-02-01      C      10      235  <----New Row
2018-03-01      C      10      235  <----New Row

注意:我們可以為新行設置0值,而不是與上一個現有行重復。

我正在嘗試通過以下代碼實現上述目標,但無法進一步取得進展:

max_d = df.loc[df.groupby(['Group'])['Date'].idxmax()]
for k,v in df.groupby(['Group']):
   if k['Date'].max() < max_d['Date'].max():
      last_row = 0 <----or k.iloc[-1]
      last_row['Date'] = pd.DateOffset(month=1)
      k.append(last_row)

但我收到錯誤:

  Traceback (most recent call last):
File "<ipython-input-6-44d0a094516e>", line 2, in <module>
  if k['Date'].max() < max_d['Date'].max():
TypeError: 'int' object is not subscriptable

我錯過了上面代碼中的任何內容嗎? 任何線索將不勝感激。

使用pd.MultiIndex重新索引您的 df:

df["Date"] = pd.to_datetime(df["Date"])

s = pd.MultiIndex.from_product([df["Date"].unique(),df["Group"].unique()],names=["Date","Group"])

print (df.set_index(["Date","Group"]).reindex(s)
       .reset_index()
       .sort_values(["Group","Date"])
       .ffill())

        Date Group  Value  Duration
0 2018-01-01     A   20.0      30.0
3 2018-02-01     A   10.0      60.0
6 2018-03-01     A   10.0      60.0
1 2018-01-01     B   15.0     180.0
4 2018-02-01     B   30.0     210.0
7 2018-03-01     B   25.0     238.0
2 2018-01-01     C   10.0     235.0
5 2018-02-01     C   10.0     235.0
8 2018-03-01     C   10.0     235.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM