匹配pandas数据帧之间的间隔

时间:2018-03-22 01:29:05

标签: pandas dataframe intervals matching

我有两个数据帧。第一个(file_1),包含ID列和深度

的深度
           ID  Depth_From  Depth_To 
0      HLD032      611.10    612.00  
1      HLD032      612.00    612.20   
2      HLD032      612.20    614.80  
3      HLD032      614.80    616.20 
4      HLD032      616.20    617.80
...        ...         ...       ...  
10082  HLD650      594.80    596.50      
10083  HLD650      596.50    597.40        
10084  HLD650      597.40    598.10   

第二个数据框(file_2),包含一个ID列,深度和深度以及一些参数(填充,粗糙度,厚度)

            ID  Depth_From  Depth_To Infill Roughness  Thickness
0       HLD032      681.30   681.301    Qtz         R        0.5
1       HLD032      681.37   681.371    Qtz         R        0.5
2       HLD032      681.50   681.501    Qtz         R        0.5
3       HLD032      682.15   682.151    Qtz         R        0.5
4       HLD032      682.71   682.711    Qtz         R        0.5
...        ...         ...       ...    ...       ...        ...
125219  HLD650      569.95   569.970    Qtz         R       24.0
125220  HLD650      573.08   573.090    Qtz         R        5.0
125221  HLD650      588.97   588.980    Qtz         R       10.0

我需要的是为每个ID和file_1的每个间隔(深度,深度)创建匹配第二个数据帧(file_2)中的对应参数(填充,粗糙度,厚度)。

由于每个参数的多个值对应于每个间隔,我想要一个像

这样的列
            ID  Depth_From  Depth_To Infill             Roughness  Thickness
0       HLD032      611.10    612.00     Qtz, Qtz, Qtz    R,R,R,K   0.3,0.10.5
1       HLD032      681.37   681.371    Qtz, Chl,Chl      S,R,R   0.1.0.2,0.5
2       HLD032      681.50   681.501    Qtz,Btz,Lm       R,Y,Y        0.5,3,1

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

希望您能够利用我创建的数据利用此解决方案:

import pandas as pd

df1 = pd.DataFrame({'ID': [1, 1, 1, 1, 2, 2, 2, 2],
                    'From': [1, 3, 5, 7, 1, 2, 3, 4],
                    'To': [4, 6, 6, 9, 3, 4, 7, 6]})

df2 = pd.DataFrame({'ID': [1, 1, 2],
                    'From': [3, 5, 5],
                    'To': [4, 6, 6],
                    'Value': [5,10,15]})

df1['Value'] = df1.apply(lambda x: ', '.join(df2.loc[(df2['ID']==x['ID'])& \
                                                    (df2['From']>=x['From'])& \
                                                    (df2['To']<=x['To']), 'Value'].astype(str).tolist()), axis=1)
df1
#   From  ID  To  Value
#0     1   1   4      5
#1     3   1   6  5, 10
#2     5   1   6     10
#3     7   1   9       
#4     1   2   3       
#5     2   2   4       
#6     3   2   7     15
#7     4   2   6     15