我有两个熊猫数据框,我想与规则结合使用。如何将两个熊猫数据框与条件结合?
这是第一个数据帧
import pandas as pd
df1 = pd.Dataframe()
df1
rank begin end labels
first 30953 31131 label1
first 31293 31435 label2
first 31436 31733 label4
first 31734 31754 label1
first 32841 33037 label3
second 33048 33456 label4
....
第二数据帧是仅两列,rank
和start
df2
rank start
first 31333
first 31434
first 33039
first 33123
first 33125
在第一数据帧df1
,所述数据具有begin
和end
。我想检查df2
中的开始整数是否在这个范围内。
下面是最终的结果应该是这样的:
result
rank start labels
first 31333 label2
first 31434 label2
first 33039 NaN
first 33123 label4
first 33125 label4
的start==31333
是df1
与label = label2
到31435
范围31293
之间。整数31434
也在范围31293:31435
之间,所以它也被注释为label2
。值33039
不在df2
之间的任何区间之间,因此它获得NaN
值。
由这些dataframes被组合的规则是这样的:
(df2.start >= df1.begin) & (df2.start <= df1.end)
但同时,每行必须在相同的秩值,例如匹配每行必须匹配此条件的第一个或第二个字符串。
下面是我用这两个dataframes结合的代码,但它不会在所有规模非常好:
from numpy import nan
def between_range(row):
subset = df1.loc[(row["rank"] == df1.rank) & (row.start >= repeats.start) & (row.start <= repeats.end), :]
if subset.empty:
return np.nan
return subset.labels
有另一种方式与合并(也许秩)来做到这一点?任何其他基于熊猫的解决方案?
@Kartik我试图简化这里的问题。感谢您的帮助 – EB2127
@MaxU我已经更新了上述内容。任何想法如何扩展/工作? – EB2127