python - 基于另一个数据框将值从一列滚动到另一列
问题描述
我有两个数据框:
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
相应月份内的第一个数据帧中的值填充值(例如,我取A3
from的最后一个值2018-05
并将其放入 .IF 的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
推荐阅读
- git - 如何用 git lfs 中的链接替换大文件
- c# - C# - XLSX 到 SQL Server - OpenRecordSet 在 C# 中不工作,但在 MS SQL Server Management Studio 中工作
- php - PHP如何将带有引用的数组转换为普通数组并保留引用值?
- html - 如何在模块中拆分html文件?
- python - 为什么字典查找在我的 Python 电话簿程序中不起作用?
- python - Python 任务我在运行时遇到问题
- python - Flask SQLAlchemy .query.all() 仅返回 PK
- python - Dash:跨页面具有相同数据的多页面应用程序
- javascript - 你如何点击这个对象的键?
- java - Python多行字符串更改缩进