【发布时间】:2017-02-08 17:31:18
【问题描述】:
我有以下熊猫数据框:
import pandas as pd
df = pd.DataFrame('filename.csv')
print(df)
order start end value
1 1342 1357 category1
1 1459 1489 category7
1 1572 1601 category23
1 1587 1599 category2
1 1591 1639 category1
....
15 792 813 category13
15 892 913 category5
....
因此,有一个 order 列,每列包含许多行,然后是每行从 start 到 end 的范围/间隔。然后每一行都由某个value 标记(例如category1、category2 等)
现在我有另一个名为 key_df 的数据框。基本上是一模一样的格式:
import pandas as pd
key_df = pd.DataFrame(...)
print(key_df)
order start end value
1 1284 1299 category4
1 1297 1309 category9
1 1312 1369 category3
1 1345 1392 category29
1 1371 1383 category31
....
1 1471 1501 category31
...
我的目标是获取key_df 数据帧并检查间隔start:end 是否与原始数据帧df 中的任何行匹配。如果是这样,df 中的这一行应该用key_df 数据框的value 值标记。
在我们上面的示例中,数据框 df 最终会是这样的:
order start end value key_value
1 1342 1357 category1 category29
1 1459 1489 category7 category31
....
这是因为如果你查看key_df,行
1 1345 1392 category29
区间 1::1345-1392 落在原始 df 的区间 1::1342-1357 中。同样,key_df 行:
1 1471 1501 category31
对应df中的第二行:
1 1459 1489 category7 category31
我不完全确定
(1)如何在pandas中完成这个任务
(2) 如何在 pandas 中有效地扩展它
可以以 if 语句开头,例如
if df.order == key_df.order:
# now check intervals...somehow
但这并没有利用数据帧结构。然后必须按间隔检查,即(df.start =< key_df.start) && (df.end => key_df.end)
我被困住了。在熊猫的“间隔”中匹配多列的最有效方法是什么? (如果满足此条件,则创建一个新列很简单)
【问题讨论】:
标签: python pandas dataframe match intervals