+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

来自一个df的时间戳,介于来自另一个df的2个时间戳之间

发布于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_TIMEEND_TIME从DF2,在DF1我想后添加年龄的列国家从DF2。有点像联接。

对于日期,我将使用这样的蒙版:

mask = (df1['time'] > df2s['start_time]) & (df1['time'] <= df2s['end_time])
df1 = df1.loc[mask]

但是在这里我要处理时间戳,我需要考虑hh:mm。您能给我一些提示,告诉我如何实现目标吗?


解决方案


您的start_timeend_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黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

14 0
收藏该文
已收藏

评论内容:(最多支持255个字符)