繁体   English   中英

熊猫:连接两个数据帧之间的信息

[英]Pandas: Connecting information between two dataframes

我有两个数据帧。 数据框A包含有关旅行的信息:

Id  Name        StartTime           EndTime
0   201 Car1    2016-01-01 00:00:00 2016-01-01 00:43:05
1   205 Car2    2016-01-01 00:10:00 2016-01-01 00:45:05
2   345 Car3    2016-01-01 00:01:00 2016-01-01 00:47:05
3   456 Car2    2016-01-02 00:00:00 2016-01-02 02:45:05
4   432 Car1    2016-01-02 00:00:00 2016-01-02 02:47:05

数据帧B包含旅行期间的时间戳(如gps)。

    Name    Timestamp
0   Car1    2016-01-01 00:05:00
1   Car1    2016-01-01 00:05:24
2   Car2    2016-01-01 00:10:04
3   Car3    2016-01-01 00:01:04
4   Car2    2016-01-01 00:10:34
5   Car1    2016-01-01 00:05:54

我需要添加到数据帧一列BId ,从数据框中拾起标识A基于名称和帧的开始时间和结束时间A 这两个数据帧都非常大,所以我需要一种有效的方法。

我认为您需要在列Name上与外部联接merge ,然后按boolean indexing进行筛选,最后逐个drop

df = pd.merge(df1, df2, on='Name', how='outer')
df = df[(df.StartTime <= df.Timestamp) & (df.EndTime >= df.Timestamp)]
df = df.drop(['StartTime','EndTime'], axis=1)
print (df)
     Id  Name           Timestamp
0   201  Car1 2016-01-01 00:05:00
1   201  Car1 2016-01-01 00:05:24
2   201  Car1 2016-01-01 00:05:54
6   205  Car2 2016-01-01 00:10:04
7   205  Car2 2016-01-01 00:10:34
10  345  Car3 2016-01-01 00:01:04

这似乎是最近添加的merge_asof 这需要左侧数据帧(此处是数据帧B)并执行以下操作:

对于左侧DataFrame中的每一行,我们选择右侧DataFrame中的最后一行,其中“on”键小于或等于左侧的键。 两个DataFrame必须按键排序。

确保我们有时间戳数据

dfa['StartTime'] = pd.to_datetime(dfa.StartTime)
dfa['EndTime'] = pd.to_datetime(dfa.EndTime)
dfb['Timestamp'] = pd.to_datetime(dfb.Timestamp)

然后排序连接列

dfb = dfb.sort_values('Timestamp')
dfa = dfa.sort_values('StartTime')

Perfom由'名字'合并

pd.merge_asof(dfb, dfa, left_on='Timestamp', right_on='StartTime', by='Name')

产量

   Name           Timestamp   Id           StartTime             EndTime
0  Car3 2016-01-01 00:01:04  345 2016-01-01 00:01:00 2016-01-01 00:47:05
1  Car1 2016-01-01 00:05:00  201 2016-01-01 00:00:00 2016-01-01 00:43:05
2  Car1 2016-01-01 00:05:24  201 2016-01-01 00:00:00 2016-01-01 00:43:05
3  Car1 2016-01-01 00:05:54  201 2016-01-01 00:00:00 2016-01-01 00:43:05
4  Car2 2016-01-01 00:10:04  205 2016-01-01 00:10:00 2016-01-01 00:45:05
5  Car2 2016-01-01 00:10:34  205 2016-01-01 00:10:00 2016-01-01 00:45:05

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM