【问题标题】:Merge Dataframe in Python with a column and time difference value of 1 minute在 Python 中合并 Dataframe,列和时间差值为 1 分钟
【发布时间】:2020-03-17 01:50:13
【问题描述】:

我是 python 新手,想要帮助合并两个 datafames:

a) 在数字字段 df1_UL_GTP_TEID_0_intdf2_TEID_UL_int 中应该具有相同的值

b) df1 START_TIME_roundoff 和 df2 TS_START_roundoff 之间的差异应该是 1 分钟。

df1
START_TIME_roundoff UL_GTP_TEID_0_int   TIMSI/MSIN
46  2020-03-10 12:00:00 1196907781  3.240371e+09
190 2020-03-10 12:01:00 1147678181  3.244522e+09
308 2020-03-10 12:05:00 1147678181  3.244522e+09
496 2020-03-10 12:07:00 1691830165  3.252351e+09
632 2020-03-10 12:12:00 1809929829  3.237458e+09

df2
S_START_roundoff    TEID_UL_int DIR
1   2020-10-03 09:59:00 1973380469  1
2   2020-10-03 10:00:00 2041336357  2
4   2020-10-03 12:06:00 1147678181  12
5   2020-10-03 09:57:00 1295205669  1
6   2020-10-03 12:12:00 1809929829  13

<<< Expected OUTPUT >>> 
row 308 of df_1 should merge with row 4 of df_2
and row 632 of df_1 should merge with row 6 of df_2

逻辑:

If absolute value of |df1.START_TIME_roundoff - df2.TS_START_roundoff| <= 1 then 
df_new = pd.merge(df_1, df_2, how='inner', left_on='UL_GTP_TEID_0_int', right_on='TEID_UL_int')

提前致谢,

【问题讨论】:

  • 请提供一个可供人们使用的复制/粘贴数据框。
  • 已添加。这是你要求的吗?

标签: python pandas dataframe merge


【解决方案1】:

使用下面的数据框:

df1= pd.DataFrame({'A': [1, 2, 3],
                   'B': ['2019-01-01 10:00:00', '2019-01-02 12:20:00', '2019-01-01 10:00:00'],
                   'C': ['ID1', 'ID2', 'ID3']})
df2= pd.DataFrame({'D': ['D1', 'D2', 'D3'],
                   'E': ['2019-01-01 10:00:59', '2019-01-02 12:21:20', '2019-01-01 09:59:30'],
                   'F': ['ID1', 'ID2', 'ID3']})

如果我理解您正确连接两个数据集的条件,下面的代码似乎可以完成这项工作:

df = pd.merge(df1, df2, left_on='C', right_on='F', how='inner')
df['B'] = pd.to_datetime(df['B']) # Ensure it's datetime
df['E'] = pd.to_datetime(df['E']) # Ensure it's datetime
df['delta']=abs(df['B'] - df['E'])/np.timedelta64(1,'m') # Find the abs diff in minutes
df.query("delta<1").drop(columns='delta')

输出是包含 ID1 和 ID3 的合并数据帧。

这可能不是完美的解决方案,因为可能由更有经验的人在单行代码中完成。

【讨论】:

  • 非常感谢您的支持。 DELTA Query 给我 ERROR : TypeError: unsupported operand type(s) for -: 'str' and 'str' 。首先)我已将两个数据框日期时间转换为单独的列。第二)合并查询效果很好。但是在使用 DELTA QUERY 时,它给出了错误。我正在使用这个 df_join['delta']=abs(df_3dgl_volte['START_TIME_time'] - df_do_volte['TS_START_time'])/np.timedelta64(1,'m')
  • 嗨 Pratyada,只是想知道合并数据帧的名称是什么(即在我的代码中相当于 df)。我看到您在计算增量列时使用了两个不同的数据帧:df_3dgl_volte、df_do_volte。它应该只是引用您合并的数据框,而不是两个不同的数据框。
  • 抱歉,我刚刚更改了名称(别名)。查询运行良好,但最终输出“DELTA”没有给出任何输出。合并很好,但是删除 Timedelta 超过 1 分钟的行没有给出任何输出。在 abs(df_3dgl_volte['START_TIME_time'] - df_do_volte['TS_START_time'])/np.timedelta64(1,'m')中的 NAN 值
  • 您的日期时间列中是否缺少数据?您可以使用以下代码格式进行检查:df['Column'].isnull().sum()。如果要过滤掉缺失值,请使用此 df[df['delta'].notnull()]。然后尝试再次运行最后一行。如果这些没有帮助,您能否分享您正在使用的编码块 - 这将有助于我更好地理解。
  • 我在选择数据框的日期时间列时做错了。它现在可以工作了!非常感谢佐尔扎亚。真的很感激..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 2019-02-03
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
相关资源
最近更新 更多