DataFrame хранит только более высокие / более низкие значения - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь очистить набор данных.Должны быть сохранены только значения, меньшие, чем последнее значение.

Сейчас это выглядит примерно так:

   my_data
0       10
1        8
2        7
3       10
4        5
5        8
6        2

после очистки должно выглядеть так:

   my_data
0       10
1        8
2        7
3        7
4        5
5        5
6        2

У меня также есть некоторый рабочий код, но я ищу более быстрый и более питонский способ сделать это.

import pandas as pd

df_results = pd.DataFrame()
df_results['my_data'] = [10, 8, 7, 10, 5, 8, 2]

data_idx = list(df_results['my_data']._index)
for i in range(1, len(df_results['my_data'])):
    current_value = df_results['my_data'][data_idx[i]]
    last_value = df_results['my_data'][data_idx[i - 1]]

    df_results['my_data'][data_idx[i]] = current_value if current_value < last_value else last_value

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Я использую shift с diff

s=df.my_data.diff().gt(0)
df.loc[s,'my_data']=df.loc[s.shift(-1).fillna(False),'my_data'].values

Out[71]: 
   my_data
0     10.0
1      8.0
2      7.0
3      7.0
4      5.0
5      5.0
6      2.0
0 голосов
/ 22 мая 2018

Вы можете использовать:

In [53]: df[df.my_data.diff() > 0] = np.nan

In [54]: df
Out[54]: 
   my_data
0     10.0
1      8.0
2      7.0
3      NaN
4      5.0
5      NaN
6      2.0

In [55]: df.ffill()
Out[55]: 
   my_data
0     10.0
1      8.0
2      7.0
3      7.0
4      5.0
5      5.0
6      2.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...