【发布时间】:2021-08-29 07:22:50
【问题描述】:
我有一个带有 2 个相关列“日期”和“值”的 python pandas 数据框,我们假设它看起来像这样并按日期排序:
data = pd.DataFrame({"date": ["2021-01-01", "2021-01-31", "2021-02-01", "2021-02-28", "2021-03-01", "2021-03-31", "2021-04-01", "2021-04-02"],
"value": [1,2,3,4,5,6,5,8]})
data["date"] = pd.to_datetime(data['date'])
现在我想以这样一种方式将 dataFrame 加入到自身中,即我得到每个月最后一个可用天的值更高的下一个可用天。在我们的示例中,这基本上应该如下所示:
date, value, date2, value2:
2021-01-31, 2, 2021-02-01, 3
2021-02-28, 4, 2021-03-01, 5
2021-03-31, 6, 2021-04-02, 8
2021-04-02, 8, NaN, NaN
我目前对该问题的部分解决方案如下所示:
last_days = data.groupby([data.date.dt.year, data.date.dt.month]).last()
res = [data.loc[(data.date>date) & (data.value > value)][:1] for date, value in zip(last_days.date, last_days.value)]
print(res)
但是因为这个答案"Don't iterate over rows in a dataframe",我觉得这不像是熊猫的方式。
那么问题来了,怎么用 pandas 的方式解决呢?
【问题讨论】:
标签: python pandas dataframe join