соответствие 2 DFS на нескольких условиях - PullRequest
1 голос
/ 02 апреля 2019

Я пытаюсь получить соответствующее значение df1 из df2 на основе 2 условий. вот 2 DFS. df1:

    name value1
0   abc  3      
1   cde  1      
2   cde  4      
3   ijk  6      

df2:

    name value1 value2
0   abc  3      5
1   cde  3      5
2   cde  1      1
3   ijk  2      3

Я хочу получить в df1 df2.value2, для которого совпадает имя и для которого df1.value1.between(df2.value1, df2.value2) проверено

Я пробовал:

df1['value2'] = df2[(df2['name']==df1['name'])(df1['value1'].between(df2['value1']., df2['value2']))]['value2']

но без удачи .. у вас, ребята, есть предложения?

здесь вы видите мой ожидаемый результат на df1:

    name value1 value2
0   abc  3      5
1   cde  1      1
2   cde  4      5
3   ijk  6      nan

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Вам нужно merge оба столбца вместе, а затем отфильтровать по between, если необходимо пропустить значения для несопоставленных значений, добавить merge с левым объединением:

print (df1)
  name  value1  col
0  abc       3    1
1  cde       1    5
2  cde       4    7
3  ijk       6    3


df = df1.merge(df2, on='name', how='outer', suffixes=('','_'))

df = df[df.value1.between(df.value1_, df.value2)]
df = df1.merge(df[df2.columns], how='left')
print (df)
  name  value1  col  value2
0  abc       3   10     5.0
1  cde       1   50     1.0
2  cde       4   70     5.0
3  ijk       6   30     NaN
0 голосов
/ 02 апреля 2019

Также вы можете использовать numpy.where () :

df1['value2'] =np.where(df1.value1.between(df2.value1, df2.value2), df2['value2'], np.nan)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...