2015-11-06 2 views
-1

у меня есть dataframe вроде этого:Запросы dataframe на основе численного сходства между рядами

 Allotment  Date   NDVI_Kurtosis NDVI_Skewness 
1 D    19840621  1.02    3.06 
2 D    19850619  1.76    2.56 
3 A    19840621  3.66    3.50 
4 A    19850619  1.56    3.20 

и я хочу, чтобы вернуться каждый Allotment и связанный с Date если ОБЕ NDVI_Kurtosis и NDVI_Skewness находятся в пределах 1,00 друг от друга между различными строк. Таким образом, в этом случае, я хотел бы это вернулся:

Allotment   Date   NDVI_Kurtosis NDVI_Skewness 
    D    19840621  1.02    3.06 
    D    19850619  1.76    2.56 
    A    19850619  1.56    3.20 

Я играл вокруг с помощью iloc для этого, но не увенчались успехом до сих пор.

+0

'если ОБОИХ NDVI_Kurtosis и NDVI_Skewness находятся в пределах 1.00 друг от друга между разными строками' Не могли бы вы объяснить лучше? – WoodChopper

+0

Итак, в моем примере строки 1, 2 и 4 имеют прелесть и асимметрию в пределах 1.00 друг от друга. Строка 3 не соответствует требованию, потому что значение эксцесса составляет более 1,00 от значения куртоза в любом другом ряду, даже если значение асимметрии находится внутри него. Его трудно объяснить, но я надеюсь, что это поможет –

ответ

0

Вы можете использовать функцию сдвига для создания новых столбцов и после того, как вы сможете сравнить их с начальными столбцами.

import pandas as pd 
df=pd.read_clipboard() 
df['NDVI_Kurtosis_lag']=df['NDVI_Kurtosis'].shift(1).fillna(df['NDVI_Kurtosis']) 
df['NDVI_Skewness_lag']=df['NDVI_Skewness'].shift(1).fillna(df['NDVI_Skewness']) 
df 
df2=df[(df['NDVI_Kurtosis']-df['NDVI_Kurtosis_lag']<1) & (df['NDVI_Skewness']-df['NDVI_Skewness_lag']<1)] 
df2 

Cordialy, Laurent.

Смежные вопросы