【问题标题】:Returning a value that is between two row values (pseudo-time series?) [duplicate]返回两个行值之间的值(伪时间序列?)[重复]
【发布时间】:2020-02-08 16:06:15
【问题描述】:

我在这里尝试并失败了。我要做的就是从此数据框中获取“Time_of_Event”值:

events_data = {'Time_of_Event':[8, 22, 24,34,61,62,73,79,86]}
my_events_df = pd.DataFrame(events_data)

并针对此数据帧的“Job_Start_Times”进行搜索:

job_data = {'Job_Start_Time':[20,50,75], 'Job_Name':['Job_01','Job_02','Job_03']}
my_jobs_df = pd.DataFrame(job_data)

并找到它属于哪个范围,并将“Job_Name”返回/附加到我的第一个“my_events_df”数据帧。

例如,对于“Time_of_Event”中的值 8,我想返回“Job_01”。对于 61 的值,我想返回“Job_02”,因为 61 介于 50 和 75 之间。

我尝试了一些 for 循环、if-else,但没有取得太大进展。任何帮助表示赞赏!

【问题讨论】:

  • 我不清楚你在问什么,如果它在 20 到 50 之间,即 24 是 Job_01 还是 Job_02
  • 这能回答你的问题吗? Python: Checking to which bin a value belongs
  • 您能否发布预期的输出数据框,类似于您发布输入数据框的方式。这样,您想要什么会更清楚。特别是当垃圾箱不重叠时

标签: python pandas dataframe


【解决方案1】:

我们可以试试pd.merge_asof

new_df = (pd.merge_asof(my_events_df.sort_values('Time_of_Event'),
                        my_jobs_df, left_on='Time_of_Event',
                        right_on = 'Job_Start_Time',
                        direction = 'backward')
  .drop(columns = 'Job_Start_Time')
  .bfill())
print(new_df)
   Time_of_Event Job_Name
0              8   Job_01
1             22   Job_01
2             24   Job_01
3             34   Job_01
4             61   Job_02
5             62   Job_02
6             73   Job_02
7             79   Job_03
8             86   Job_03

【讨论】:

  • 这正是我一直在寻找的东西......我不会想出来的。非常感谢您的帮助!
  • 不客气:) 请考虑接受我的回答:)
猜你喜欢
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多