根据以下代码,我有两个 DataFrame。
Key_DF = pd.DataFrame({'TC': {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'F', 5: 'G'}, 'D_time': {0: '2/5/2021 10:00', 1: '2/5/2021 22:00', 2: '2/7/2021 11:35', 3: '2/8/2021 11:35', 4: '2/9/2021 11:35', 5: '2/10/2021 11:35'}, 'FName': {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'A', 5: 'B'}})
Main_DF = pd.DataFrame({'Test Case': {0: 'A', 1: 'A', 2: 'B', 3: 'D', 4: 'D', 5: 'G', 6: 'G'}, 'Timestamp': {0: datetime.datetime(2021, 2, 5, 9, 34, 25), 1: datetime.datetime(2021, 2, 5, 14, 34, 25), 2: 'Wed Nov 25 17:30:12 2020', 3: '11/30/2020 11:48:38 AM', 4: 'Mon Feb 8 13:39:00 2021', 5: 'Mon Feb 9 15:42:50 2021', 6: 'Wed Dec 2 14:56:26 2020'}})
Key_DF.D_time = pd.to_datetime(Key_DF.D_time)
Main_DF.Timestamp = pd.to_datetime(Main_DF.Timestamp)
print (Key_DF)
print (Main_DF)
需要用“Main_DF”做以下操作。
Key_DF
列的数据(例如:“1-1.1”和“2/5/2021 10:00”)Main_DF
匹配Main_DF.Timestamp
> Key_DF.D_time
Main_DF
的新鲜filtered_Df。最终输出应如下所示,其中应满足 Main_DF.Timestamp
> Key_DF.D_time
条件。
我可以在这里使用任何格式的 Timestamp 列。
答案 0 :(得分:1)
datetime64[ns] dtype
dtypes
检查.info()
'TC'
和 'Test Case'
上合并
'TC'
列不会作为单独的列添加,而是将重命名为 'Test Case'
df.Timestamp <= df.D_time
或 df.D_time.isna()
的布尔选择
df.D_time.isna()
将保留 'Timestamp'
列在 'D_time
列中没有匹配时间的行。Main_DF.Timestamp > Key_DF.D_time
处的值与保留 df.Timestamp <= df.D_time
处的值相同'G'
。'TC'
列中的值是唯一的,如 OP 中所示'FName'
列,因此它被忽略。# merged the two dataframes
df = Main_DF.merge(Key_DF[['TC', 'D_time']].rename(columns={'TC': 'Test Case'}), on='Test Case', how='left')
# display(df)
Test Case Timestamp D_time
0 A 2021-02-05 09:34:25 2021-02-05 10:00:00
1 A 2021-02-05 14:34:25 2021-02-05 10:00:00
2 B 2020-11-25 17:30:12 2021-02-05 22:00:00
3 D 2020-11-30 11:48:38 2021-02-08 11:35:00
4 D 2021-02-08 13:39:00 2021-02-08 11:35:00
5 G 2021-02-09 15:42:50 2021-02-10 11:35:00
6 G 2020-12-02 14:56:26 2021-02-10 11:35:00
# filter the dataframe to keep data where Timestame is <= to D_time
df = df[(df.Timestamp <= df.D_time) | df.D_time.isna()].drop(columns=['D_time']).reset_index(drop=True)
# display(df)
Test Case Timestamp
0 A 2021-02-05 09:34:25
1 B 2020-11-25 17:30:12
2 D 2020-11-30 11:48:38
3 G 2021-02-09 15:42:50
4 G 2020-12-02 14:56:26