首页 > 解决方案 > pandas DataFrame 上的区间查找

问题描述

有两个数据框,df_A并且df_B

df_A
Out[61]: 
   A   B
0  1  10
1  2  60
2  3  40

df_B
Out[62]: 
   A   B   D
0  1   5  10
1  1  10  25
2  1  20  60
3  2   5  10
4  2  10  25
5  2  20  60
6  3  10  20
7  3  15  40
8  3  25  80

现在我需要在列上左加入df_A和,棘手的部分是要考虑如下df_BABdf_B

df_B
Out[64]: 
   A        B   D
0  1   [5,10)  10
1  1  [10,20)  25
2  1    [20:)  60
3  2   [5,10)  10
4  2  [10,20)  25
5  2    [20:)  60
6  3  [10,15)  20
7  3  [15,25)  40
8  3    [25:)  80

因此对于B大于等于 5 且小于 10 的值,应在以下情况下返回值 '10'df_A['A'] == 1

我的输出数据框应该是这样的

df_C
Out[66]: 
   A   B   D
0  1  10  25
1  2  60  60
2  3  40  80

标签: pythonpandas

解决方案


我确信有更多的熊猫/矢量化方式可以做到这一点,但这里有一个选项:

C = []
for A, B in zip(df_A['A'],df_A['B']):
    idx = ((df_B[df_B['A']==A]['B'] > B).cumsum() == 0).sum() - 1
    C.append(df_B[df_B['A']==A].iloc[idx,-1])

df_C = df_A.copy(deep=True).assign(C=C)

现在

>>> df_C
   A   B   C
0  1  10  25
1  2  60  60
2  3  40  80

推荐阅读