使用熊猫找到重叠

时间:2017-04-26 17:37:39

标签: python pandas

file1:

col0 col1 col2 col3
1    20   10   -
1    25   30   +
2    50   40   -
2    60   70   +

file2的:

col0 col1 col2 col3 col4 col5
1    25   5   -     e1    e2
1    20   30   +    e4    e24
2    45   35   -    e9    e12
2    55   75   +    e10    e21

我需要检查3个条件: 1)检查col0中的元素是否相同(1 == 1)

2)如果是,则检查col3是否为 - 或+,如果 - 那么col1值将高于col2,如果是+,则检查相反,

3)检查范围是否在文件2的col1和col2之内,即    如果满足所有条件,则第二行25-30落在20-30范围内,将文件1中的行和文件2中的col4和col5放入(这是一些元信息)

col0 col1 col2 col3 col4 col5
1    20   10   -    e1    e2
1    25   30   +    e4    e24
2    50   40   -    e9    e12
2    60   70   +    e10   e21

简单的python代码会有这样的条件

for i in file1:
    for j in file2:
        if i[1]<j[1] and i[2]<j[2] and i[0]==j[0]:
           print j

不知道如何解释这个标志,我怎么能用熊猫来实现这个目标,或者熊猫不是一个正确的方法?

1 个答案:

答案 0 :(得分:1)

这是一种方法:

生成OP提供的样本数据

# copy file1 data from OP, then run:
df1 = pd.read_clipboard().reset_index()

# copy file2 data from OP, then run:
df2 = pd.read_clipboard().reset_index()

合并并过滤数据

# merge data on row index and col0 value
df3 = (df1.merge(df2.drop('col3',1), on=['index','col0'], suffixes=('_1','_2'))
          .drop('index',1))

# sort range cols from file2
df3[['col1_2','col2_2']] = df3[['col1_2','col2_2']].apply(sorted, axis='columns')

# filter based on file1 range within file2 range, drop extra cols
df3 = (df3.loc[df3.col1_1.between(df3.col1_2, df3.col2_2) & df3.col2_1.between(df3.col1_2, df3.col2_2)]
          .drop(['col1_2','col2_2'], 1))
print(df3)

<强>输出

   col0  col1_1  col2_1 col3 col4 col5
0     1      20      10    -   e1   e2
1     1      25      30    +   e4  e24
3     2      60      70    +  e10  e21