[英]Rolling over values from one column to other based on another dataframe
我有兩個數據框: DF1
ID DatePaid Remaining
A1 2018-01-01 8500
A2 2018-02-15 2000
A2 2018-02-28 1900
A3 2018-04-12 3000
A3 2018-05-12 2700
A3 2018-05-17 110
A3 2018-06-17 0
A4 2018-06-18 10
A5 2018-07-13 500
現在我有另一個數據幀DF2
,它只有來自第一個數據幀的唯一 ID,以及代表月份的日期:
ID 2018-01-31 2018-02-28 2018-03-31 2018-04-30 2018-05-31 2018-06-30 2018-07-31
A1
A2
A3
A4
A5
因此,基於第一個數據幀,我需要根據相應月份內第一個數據幀中的Remaining
值填充值(例如,我從2018-05
獲取A3
的最后一個值並將其放入2018-05-31
列在DF2
。如果該 ID 沒有其他值,只需用最右邊的填充列中的值填充DF
所有剩余列(向右滾動)。
所以最終的結果是這樣的
ID 2018-01-31 2018-02-28 2018-03-31 2018-04-30 2018-05-31 2018-06-30 2018-07-31
A1 8500 8500 8500 8500 8500 8500 8500
A2 NA 1900 1900 1900 1900 1900 1900
A3 NA NA NA 3000 110 0 0
A4 NA NA NA NA NA 10 10
A5 NA NA NA NA NA NA 500
這為您提供df2
形式的數據:
month_ends = pd.to_datetime(df1.DatePaid).dt.to_period('M')
# also
# month_ends = pd.to_datetime(df1.DatePaid).add(pd.offsets.MonthEnd(0))
(df1.groupby(['ID', month_ends])
['Remaining'].last()
.unstack(-1)
.ffill(1)
.reset_index()
.rename_axis(columns=None)
)
輸出:
ID 2018-01 2018-02 2018-04 2018-05 2018-06 2018-07
0 A1 8500.0 8500.0 8500.0 8500.0 8500.0 8500.0
1 A2 NaN 1900.0 1900.0 1900.0 1900.0 1900.0
2 A3 NaN NaN 3000.0 110.0 0.0 0.0
3 A4 NaN NaN NaN NaN 10.0 10.0
4 A5 NaN NaN NaN NaN NaN 500.0
這是我的方法。
df_ = df.pivot_table(index='ID', columns='DatePaid', values='Remaining').fillna(method='ffill',axis=1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.