Сравните два числа c pandas данных (x, y) с интерполяцией перед сравнением - PullRequest
2 голосов
/ 23 февраля 2020

Я хотел бы сравнить два числа c данных [x1, y1] и [x2, y2] с разными x, используя ['x1']

import pandas as pd
first = {'x1':[0,3,5],'y1':[0,3,6]}
df1 = pd.DataFrame(first,columns=['x1','y1'])
print (df1)
   x1   y1
0   0    0
1   3    3
2   5    6
second = {'x2':[0,2,4,6],'y2':[0,2,4,6]}
df2 = pd.DataFrame(second,columns=['x2','y2'])
print (df2)
   x2  y2
0   0   0
1   2   2
2   4   4
3   6   6

со значением x1 для интерполяции в х2, чтобы найти соответствующий у2. Прежде чем сравнивать y1 с y2, мне нужно разобраться:

   x2  y2
0   0   0
1   2   2
?   3   ?
2   4   4
?   5   ?
3   6   6

Затем сравните y1 и y2, чтобы узнать:

   x2  y2 y1 y1>y2?
0   0   0  0
1   2   2  
?   3   3  3 False 
2   4   4
?   5   5  6 True
3   6   6

1 Ответ

2 голосов
/ 23 февраля 2020

Создать один столбец DataFrame по Series.append с удалением дубликатов по Series.drop_duplicates и сортировкой по Series.sort_values:

df = (df2['x2'].append(df1['x1'], ignore_index=True)
              .drop_duplicates()
              .sort_values()
              .to_frame('x2'))
print (df)
   x2
0   0
1   2
5   3
2   4
6   5
3   6

Затем добавляется y2 с помощью DataFrame.merge с левым соединением и вызовом Series.interpolate, добавляется новый столбец y1 с помощью Series.map и последние сравниваются столбцы:

df = df.merge(df2, how='left') 
df['y2'] = df['y2'].interpolate()
df['y1'] = df['x2'].map(df1.set_index('x1')['y1'])
df['y1>y2'] = df['y1'] > df['y2']
print (df)
   x2   y2   y1  y1>y2
0   0  0.0  0.0  False
1   2  2.0  NaN  False
2   3  3.0  3.0  False
3   4  4.0  NaN  False
4   5  5.0  6.0   True
5   6  6.0  NaN  False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...