【发布时间】:2015-11-24 20:02:55
【问题描述】:
我有两个 DataFrame,我需要将两者合并,并且我需要添加一列来指定它是否被接受。
我有这个:
dfa[dfa.CONTROL.isin([334030860978638])]
Out[107]:
CONTROL A B DATE_HOUR
1629136 334030860978638 525562414612 52447860015000 2015-08-02 16:32:00
1629137 334030860978638 525562414612 52447860015000 2015-08-02 16:42:32
1629138 334030860978638 525562414612 52447860015000 2015-08-02 18:33:12
1629139 334030860978638 525562414612 52447860015000 2015-08-03 19:40:19
dfb[dfb.control.isin([334030860978638])]
Out[108]:
control a b date_hour
id
299366338 334030860978638 525562414612 447860015000 2015-08-02 16:33:08
299392621 334030860978638 525562414612 447860015000 2015-08-02 16:43:40
299665465 334030860978638 525562414612 447860015000 2015-08-02 18:34:21
view = dfa.merge(dfb, left_on=['CONTROL', 'A', 'B'],
right_on=['control', 'a', 'b'], how='outer')
我需要将 DATE_HOUR 与 date_hour 进行比较,如果记录在时间范围内(例如 3600 秒),我还需要确定是否及时存在多个记录,然后我将获取最近的记录并在新的接受的列我将设置为 True,否则为 False。
我的预期输出:
CONTROL A B DATE_HOUR control a b date_hour accepted
334030860978638 525562414612 52447860015000 2015-08-02 16:32:00 334030860978638 525562414612 52447860015000 2015-08-02 16:32:08 True
334030860978638 525562414612 52447860015000 2015-08-02 16:42:32 334030860978638 525562414612 52447860015000 2015-08-02 16:43:40 True
334030860978638 525562414612 52447860015000 2015-08-02 18:33:12 334030860978638 525562414612 52447860015000 2015-08-02 18:34:21 True
334030860978638 525562414612 52447860015000 2015-08-03 19:40:19 NaN NaN Nan NaT False
我可以使用 apply 方法来完成这项任务吗?有人可以帮助我使用 pandas 以正确的方式做。
【问题讨论】:
-
这是一个非常有趣的问题。您的
dfa已经包含来自dfb的列的图像,仅缺少值。然后它变成了一个缺失数据的问题,你基本上想为dfa的每一行求解最近邻。首先对CONTROL和control进行分组,然后对DATE_HOUR和date_hour进行排序。接下来,您必须查找并针对您的原因调整最近邻算法。 -
我会接受你的建议,谢谢,我真的很困惑。