簡體   English   中英

基於另一個數據框將值從一列滾動到另一列

[英]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.

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