我有一只像这样的熊猫:
import pandas as pd
df = pd.DataFrame({'sales':[114,114,114,113,12,10,8500,8666]})
这是来自销售的累积数据。 数据中存在一个错误:有些观察结果是错误的。 (没有值可以大于前一个:即8500和8666不正确) 我想用前一个替换这些值。
我试过这个
df['above'] = df.sales.shift(1)
df.loc[df.above < df.sales, 'sales'] = df.above
但是这段代码只运行一次,如何扩展这段代码来替换所有值,直到系列结束(前一个)?
所需的结果如下:
答案 0 :(得分:3)
您可以按条件将值替换为NaN
,然后将ffill
- fillna
与method='ffill'
一起使用:
df.loc[df.above < df.sales, 'sales'] = np.nan
df['sales'] = df['sales'].ffill()
print (df)
sales above
0 114.0 NaN
1 114.0 114.0
2 114.0 114.0
3 113.0 114.0
4 12.0 113.0
5 10.0 12.0
6 10.0 10.0
7 10.0 8500.0
与使用mask
相同,默认情况下替换为NaN
,如果始终为整数值,则最后转换为int
:
df = pd.DataFrame({'sales':[114,114,114,113,12,10,8500,8666]})
df['sales'] = df['sales'].mask(df.sales.shift(1) < df.sales).ffill().astype(int)
print (df)
sales
0 114
1 114
2 114
3 113
4 12
5 10
6 10
7 10
编辑:
df = pd.DataFrame({'sales':[114,114,114,113,12,10,8500,8400]})
df['sales'] = df['sales'].mask((df.sales.shift(1) < df.sales).cumsum() > 0).ffill().astype(int)
print (df)
sales
0 114
1 114
2 114
3 113
4 12
5 10
6 10
7 10
详情:
print ((df.sales.shift(1) < df.sales).cumsum())
0 0
1 0
2 0
3 0
4 0
5 0
6 1
7 1
Name: sales, dtype: int32
print ((df.sales.shift(1) < df.sales).cumsum() > 0)
0 False
1 False
2 False
3 False
4 False
5 False
6 True
7 True
Name: sales, dtype: bool
答案 1 :(得分:0)
这个怎么样?
SolidColorBrush Owncolor = (SolidColorBrush)(new BrushConverter().ConvertFrom("#FF5D0000"));
ToggleButton.Foreground = Brushes.Owncolor;
参考:https://stackoverflow.com/a/38467449/4772042
'200'是我抓住的正确值。将其更改为所需的值。