Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python DataFrame仅保留较高/较低的值_Python_Pandas - Fatal编程技术网

Python DataFrame仅保留较高/较低的值

Python DataFrame仅保留较高/较低的值,python,pandas,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 清理后,应如下所示: my_data 0 10 1

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

现在看起来像这样:

   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
清理后,应如下所示:

   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
我也有一些工作代码,但我正在寻找一种更快、更具python风格的方法

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
将熊猫作为pd导入
df_results=pd.DataFrame()
df_结果['my_data']=[10,8,7,10,5,8,2]
data_idx=列表(df_结果['my_data'].\u索引)
对于范围(1,len)内的i(df_结果['my_数据]):
当前_值=df_结果['my_data'][data_idx[i]]
last_value=df_结果['my_data'][data_idx[i-1]]
df_结果['my_data'][data_idx[i]]=如果当前_值<上次_值,则当前_值
您可以使用:

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
您可以使用:

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

我正在使用
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

我正在使用
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

我可能太早接受了答案,我对浮点数有问题。[10,8,7,10,5,8,2,2.1,2.01,3,1]第一行返回[10.0,8.0,7.0,nan,5.0,nan,2.0,nan,2.01,nan,1.0]@HennyKo这就是你想要的,这个结果有什么问题?你期待什么?[10.0,8.0,7.0,nan,5.0,nan,2.0,nan,nan,nan,1.0]因为2.01比2大。0@HennyKo然后只需使用
df.cummin()
。尽管这与您的问题相矛盾:“只应保留小于最后一个值的值。”我可能过早接受了答案,我对浮点数有问题。[10,8,7,10,5,8,2,2.1,2.01,3,1]第一行返回[10.0,8.0,7.0,nan,5.0,nan,2.0,nan,2.01,nan,1.0]@HennyKo这就是你想要的,这个结果有什么问题?你期待什么?[10.0,8.0,7.0,nan,5.0,nan,2.0,nan,nan,nan,1.0]因为2.01比2大。0@HennyKo然后只需使用
df.cummin()
。尽管这与您的问题相矛盾:“只应保留小于最后一个值的值。”