[英]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
。 我想插入一個Date
為2018-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.