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()
。尽管这与您的问题相矛盾:“只应保留小于最后一个值的值。”