DataFrame仅保留更高/更低的值

时间:2018-05-22 15:14:53

标签: python pandas

我正在尝试清理数据集。只应保留小于最后一个值的值。

现在它看起来很像:

   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

我也有一些工作代码,但我正在寻找一种更快,更pythonic的方法。

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 :(得分:1)

您可以使用:

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

答案 1 :(得分:1)

我将shiftdiff

一起使用
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