pandas 基于单列时间戳(彼此不同)合并两个数据集

j1dl9f46  于 2023-01-19  发布在  其他
关注(0)|答案(2)|浏览(117)

我想根据相似的时间戳合并两个数据集。两个数据集具有不同的时间戳格式,如下所示:
东风1

d1 = {'col1': ["a1-20220517-183028.spc", "a2-20220518-183028.spc","a3-20220519-183028.spc","a4-20220525-183028.spc"], 
      'col2': [a, b ,c,d]}
df_1 = pd.DataFrame(data=d1)

东风2

d2 = {'col1.2': ["18-05-2022 12:23","17-05-2022 0:16:00" ,"25-05-2022 20:23","19-05-2022 14:54","02-05-2022 12:14"], 
      'col2.2': [12, 2 ,3,10, 1]}
df_2 = pd.DataFrame(data=d2)

我想根据DF 1中col 1和DF 2中col1.2的时间戳合并df_1和df_2,因此生成的输出如下所示:

d_output = {'col1': ["17-05-2022", "18-05-2022", "19-05-2022", "25-05-2022"], 
            'col2': [a, b ,c , d], 
            'col3': [2, 12 ,10, 3 ]}

df_output=pd.DataFrame(data=d)

我试过提取其中一个的时间戳并将其格式化为相同的格式,但我真的很难正确地格式化它并将两个数据集合并为一个类似的时间戳。
我能解决这个问题吗?
多谢了!

t5zmwmid

t5zmwmid1#

这是一个merge,使用str.extractpd.to_datetime进行了一些预处理:

out = (
 df_1.assign(col1=pd.to_datetime(df_1['col1'].str.extract('-(\d{8})', expand=False))
                    .dt.strftime('%d-%m-%Y'))
     .merge(
  df_2.rename(columns={'col1.2': 'col1', 'col2.2': 'col3'})
      .assign(col1=lambda d: pd.to_datetime(d['col1']).dt.strftime('%d-%m-%Y')),
         how='left', on='col1'
     )
)

输出:

col1 col2  col3
0  17-05-2022    a     2
1  18-05-2022    b    12
2  19-05-2022    c    10
3  25-05-2022    d     3
83qze16e

83qze16e2#

您可以使用pd.to_datetime函数将df_1df_2中的时间戳转换为通用格式,然后使用pd.merge函数在通用时间戳列上连接两个 Dataframe 。
比如这样一个例子:

df_1['timestamp'] = pd.to_datetime(df_1['col1'].str.extract(r'(\d{4}\d{2}\d{2}-\d{6})')[0], format='%Y%m%d-%H%M%S')

df_2['timestamp'] = pd.to_datetime(df_2['col1.2'], format='%d-%m-%Y %H:%M:%S')

df_output = pd.merge(df_1, df_2, on='timestamp')

相关问题