发布于2021-01-23 19:51 阅读(35) 评论(0) 点赞(14) 收藏(3)
0
1
2
3
4
5
我有以下2个df:
# -- create a df1
list_columns = ['time', 'code', 'age']
list_data = [
['2019-11-18 10:33:53', 'a1', 10],
['2019-11-18 11:33:56', 'a2', 15],
['2019-11-18 12:33:58', 'a4', 6],
['2019-11-18 13:45:04', 'a5', 3]
]
df1 = pd.DataFrame(columns=list_columns, data=list_data)
和
# -- create a df2
list_columns = ['start_time','end_time','name', 'country']
list_data = [
['2019-11-18 10:31:53','2019-11-18 10:35:53' ,'nick', 'germany'],
['2019-11-18 11:32:53','2019-11-18 11:35:53', 'joe', 'usa'],
['2019-11-18 12:33:58', '2019-11-18 12:35:58','smith', 'california'],
['2019-11-18 13:42:04','2019-11-18 13:47:04', 'sam', 'france']
]
df1 = pd.DataFrame(columns=list_columns, data=list_data)
df1.head()
不知道是不是有可能在大熊猫,但如果时间从DF1之间START_TIME和END_TIME从DF2,在DF1我想后添加年龄的列名和国家从DF2。有点像联接。
对于日期,我将使用这样的蒙版:
mask = (df1['time'] > df2s['start_time]) & (df1['time'] <= df2s['end_time])
df1 = df1.loc[mask]
但是在这里我要处理时间戳,我需要考虑hh:mm。您能给我一些提示,告诉我如何实现目标吗?
您的start_time
和end_time
时间间隔似乎重叠。您是否期望多个比赛?您可以像这样进行交叉合并:
(df1.assign(tmp=1)
.merge(df2.assign(tmp=1), on='tmp', how='left')
.query('start_time <= time <= end_time')
.drop(['start_time', 'end_time'], axis=1)
)
输出:
time code age tmp name country
0 2019-11-18 10:33:53 a1 10 1 nick germany
5 2019-11-18 11:33:56 a2 15 1 joe usa
10 2019-11-18 12:33:58 a4 6 1 smith california
15 2019-11-18 13:45:04 a5 3 1 sam france
0
1
2
3
4
5
6
7
8
作者:黑洞官方问答小能手
链接: https://www.pythonheidong.com/blog/article/787084/60567f387ec33f18dcd7/
来源: python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系z452as@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!