python - 如何在熊猫数据框中使用连接方法
问题描述
我有这行代码,它获取前一天的最后一个值并将其重复添加到第二天的新列中。工作正常。
df = df.join(df.resample('B', on='Date')['x'].last().rename('xnew'), on=pd.to_datetime((df['Date'] - pd.tseries.offsets.BusinessDay()).dt.date))
现在我需要类似的东西,但我无法让它工作。
我现在需要“打开”中当天的第一个值,并将该值复制到新列“打开”中的每一行中,我每天都
尝试这样做,但它不起作用:
df = df.join(df.resample('B', on='Date')['Open'].last().rename('opening'), on=pd.to_datetime((df['Date'])))
错误:
ValueError: columns overlap but no suffix specified: Index(['opening'], dtype='object')
我怎么能做到这一点?
和:
opening = df.resample('B', on='Date')['Open'].first()
Date
2019-06-20 2927.25
2019-06-21 2932.75
2019-06-24 2942.00
2019-06-25 2925.00
2019-06-26 2902.75
...
2020-06-17 3116.50
2020-06-18 3091.50
2020-06-19 3101.75
2020-06-22 3072.75
2020-06-23 3111.25
..我得到第一个值,我想要的输出是
Date Open opening
1 2020-06-24 07:00:00 3091.50 3111.25
2 2020-06-24 07:05:00 3092.50 3111.25
3 2020-06-24 07:10:00 3090.25 3111.25
4 2020-06-24 07:15:00 3089.75 3111.25
这是一些示例数据。对于此示例,现在的日期是从 7:00 到 7:15:
Time Open
Date
2019-06-20 07:00:00 70000 2927.25
2019-06-20 07:05:00 70500 2927.00
2019-06-20 07:10:00 71000 2927.00
2019-06-20 07:15:00 71500 2926.75
2019-06-21 07:00:00 70000 2932.75
2019-06-21 07:05:00 70500 2932.25
2019-06-21 07:10:00 71000 2933.00
2019-06-21 07:15:00 71500 2930.75
2019-06-24 07:00:00 70000 2942.00
2019-06-24 07:05:00 70500 2941.50
2019-06-24 07:10:00 71000 2942.00
2019-06-24 07:15:00 71500 2941.50
2019-06-25 07:00:00 70000 2925.00
2019-06-25 07:05:00 70500 2925.75
2019-06-25 07:10:00 71000 2926.50
2019-06-25 07:15:00 71500 2926.00
2019-06-26 07:00:00 70000 2902.75
2019-06-26 07:05:00 70500 2903.00
2019-06-26 07:10:00 71000 2904.00
2019-06-26 07:15:00 71500 2904.25
解决方案
我开始使用与您类似的方法,使用resample
. 我添加的东西是移动所有值,以便每个值都将第二天作为索引。然后我可以将此值提供给Series.map
在日期应用。
这是代码:
df['opening'] = df.Date.dt.date.map(df.resample('B', on='Date').Open.first().shift())
Date Open opening
0 2019-06-20 07:00:00 2927.25
1 2019-06-20 07:05:00 2927.0
2 2019-06-20 07:10:00 2927.0
3 2019-06-20 07:15:00 2926.75
4 2019-06-21 07:00:00 2932.75 2927.25
5 2019-06-21 07:05:00 2932.25 2927.25
6 2019-06-21 07:10:00 2933.0 2927.25
7 2019-06-21 07:15:00 2930.75 2927.25
8 2019-06-24 07:00:00 2942.0 2932.75
9 2019-06-24 07:05:00 2941.5 2932.75
10 2019-06-24 07:10:00 2942.0 2932.75
11 2019-06-24 07:15:00 2941.5 2932.75
12 2019-06-25 07:00:00 2925.0 2942.0
当然,第一天会有NaN。
推荐阅读
- python - 保存第一帧多个点的位置
- java - 使用对象集合的 Spring JPA 存储库 JPQL 查询
- laravel - 如何使用单个 Horizon 实例监控服务器上所有站点的作业
- quartz.net-3.0 - Qrartz.net DailyTimeIntervalScheduleBuilder - 如何识别一天中第一次和最后一次执行触发器
- python-3.x - 如何在列表中查找重复项并附加到新列表
- python - 有没有办法使用 xlsxwriter 将熊猫数据框发送到现有的 excel 工作表?
- node.js - 如何在 NodeJS 中缓存来自谷歌驱动器 API 的响应
- java - java中 Rectangle.contains() 的错误结果
- c# - 如何使用 C# 中的引用从构造函数中分配对象
- javascript - 如何修复,可滚动内容的固定布局